下载了最新的opencart2研究,下面是添加水印的方法,一共3个步骤,都可以对比本身的代码,看看改动:
1. 上传一张水印图到image目录下,名字是 watermark.png,另外水印图一般都要背景透明,所以就用png
2. system\library\image.php修改部分代码,找到watermark函数(感谢系统自带了这个函数^_^)
public function watermark($file, $position = 'center') {
$watermark = imagecreatefrompng($file);
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
switch($position) {
case 'topleft':
$watermark_pos_x = 0;
$watermark_pos_y = 0;
break;
case 'topright':
$watermark_pos_x = $this->info['width'] - $watermark_width;
$watermark_pos_y = 0;
break;
case 'bottomleft':
$watermark_pos_x = 0;
$watermark_pos_y = $this->info['height'] - $watermark_height;
break;
case 'bottomright':
$watermark_pos_x = $this->info['width'] - $watermark_width;
$watermark_pos_y = $this->info['height'] - $watermark_height;
break;
case 'center':
$watermark_pos_x = ($this->info['width']- $watermark_width)/2;
$watermark_pos_y = ($this->info['height']- $watermark_height)/2;
break;
}
imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);
imagedestroy($watermark);
}
你自己可以对照这个文件,就能看到有哪些改动,下面是几点修改的说明:
a. 去掉了创建水印图的判断,因为我们已经定死了是png图片
b. 函数默认参数改为 center,90%以上的网站都是在原图中间加 水印图片
c. case 'center'的实现
d. 函数末尾imagecopy的最后2个参数改为 水印图片的宽和高
3. catalog/model/tool/image.php 第30行左右,修改如下:
list($width_orig, $height_orig) = getimagesize(DIR_IMAGE . $old_image);
if ($width_orig != $width || $height_orig != $height) {
$image = new Image(DIR_IMAGE . $old_image);
//添加这个这里可以自行改变,因为产品小图是不用加水印的,我设置的是大于500就添加水印
if ($width > 500 || $height > 500) {
$image->watermark(DIR_IMAGE . 'watermark.png', 'center');
}
$image->resize($width, $height);
$image->save(DIR_IMAGE . $new_image);
} else {
copy(DIR_IMAGE . $old_image, DIR_IMAGE . $new_image);
}
说明: opencart是 在图片调用的地方才生成 相应的缩略图
备注:如果该功能OK,为了opencart2的规范,请复制该文件到 /system/modification/system/library/image.php,这样以后版本更新才可以直接覆盖system文件夹,不受影响。