|
本帖最后由 lyoncn 于 2014-11-27 17:55 编辑
今天我准备写一个网站上的图片水印操作方法.
我先把朋友做好的水印png放到固定位置(ky_watermark.png),然后写了两个方法.一个方法是全站统一的打水印方法.
PHP复制代码 /* 图像水印处理 */
/* 图像水印处理
* $prefix为缩略后重命名图片的前缀 */
public function ky_watermark ($source_image,$overlay_path='ky_watermark.png',$prefix='ky') {
$this->load->library('image_lib');
$config['image_library'] = 'gd2';
$config['source_image'] = $source_image;
$config['dynamic_output'] = FALSE; //动态输出,即输出后删除
$config['wm_type'] = 'overlay'; //选text为文字水印
$config['quality'] = '80'; //质量
$config['wm_vrt_alignment'] = 'middle'; //居中对齐
$config['wm_hor_alignment'] = 'center'; //居中对齐
$config['wm_padding'] = '5'; //图像相对位置(单位像素)
$config['wm_vrt_offset'] = '0'; //指定一个垂直偏移量(以像素为单位)
$config['wm_hor_offset'] = '0'; //指定一个横向偏移量(以像素为单位)
$config['wm_x_transp'] = '4'; //水印图像通道
$config['wm_y_transp'] = '4'; //水印图像通道
$config['wm_overlay_path'] = $overlay_path;
$this->image_lib->initialize($config);
if ($this->image_lib->watermark()) {
rename($source_image, dirname($source_image) . '/'.$prefix . basename($source_image));//成功后重命名原图片
} else {
echo $this->image_lib->display_errors();//失败输出错误
}
} 复制代码
另一个方法是在ky_watermark的基础上,对文件夹下所有文件进行ky_watermark的方法.
PHP复制代码
/* 基于图像水印处理的,循环回溯子文件水印处理 */
public function sub_ky_watermark ($source_dir) {
$current_dir = opendir($source_dir); //opendir()返回一个目录句柄,失败返回false
while (($file = readdir($current_dir)) !== false) { //readdir()返回打开目录句柄中的一个条目
$sub_dir = $source_dir . DIRECTORY_SEPARATOR . $file; //构建子目录路径
if ($file == '.' || $file == '..' || $file[0] == 'd' || $file[0] == 't' || $file[0] == 'k') {
//检测是否为缩略图,已删除图片,或者已水印
continue;
} else if (is_dir($sub_dir)) { //如果是目录,进行递归
$this->sub_ky_watermark($sub_dir);
} else { //如果是文件,打水印
$this->ky_watermark($sub_dir);
}
}
}
复制代码
希望对大家有帮助
下面,重点来了.
我在写这个方法的时候,曾经把$config['dynamic_output'] = FALSE;写成了$config['dynamic_output'] = 'FALSE';
然后我就卷进了无休止的调bug之中.因为在system/libraries/Image_lib.php中,第958行PHP复制代码 // Output the image
if ($this->dynamic_output == TRUE)
{
$this->image_display_gd($src_img);
} 复制代码
此风骚的判断导致我的'FALSE'字符串被判断为TRUE.
此举浪费了我近2小时的时间,一度崩溃,各种尝试.
虽然我以后不可能再犯相同的错误,但肯定有不少CI初学者在调用时出现类似的错误.
谁会想到成片的字符串config参数中忽然夹杂一个布尔型,一不小心就写错了亲.......
如果用三个等号强判断
PHP复制代码
if ($this->dynamic_output === TRUE)
{
$this->image_display_gd($src_img);
}
复制代码
我觉得效果会更好
邮箱348963373@qq.com
|
|