最近在用metinfo 5.0做一个自己的小站,功能还可以,也蛮好用,就是发现有好多小问题,做得差不多了,也懒得在换其它的cms了,自己修复一下吧~
问题一:网站后台开启图片水印功能,但发现上传图片为jpeg格式时,系统不会为这格式图片保存水印图片,在系统upload/watermark/目录下无此图片的水印图;上传图片为png,jpg,gif格式时无此问题。
调试程序源码发现:admin/include/watermark.class.php文件第102:
function createImage($type,$img_name){ if (!$type){ $type = $this->get_type($img_name); } switch ($type){ case 'gif': if (function_exists('imagecreatefromgif')) $tmp_img=@imagecreatefromgif($img_name); break; case 'jpg': $tmp_img=imagecreatefromjpeg($img_name); break; case 'png': $tmp_img=imagecreatefrompng($img_name); break; default: $tmp_img=imagecreatefromstring($img_name); break; } return $tmp_img; }
case 'jpeg': $tmp_img=imagecreatefromjpeg($img_name); break;问题解决。
问题二:想让站上的图片都加有水印,用自己透明背景的png网站logo来做水印图片,后台设置了下,上传了张图片做测试,
发现png图片透明背景色素完全乱掉,去官网搜相关问题,发现暂时不支持,于是自己改。
步骤如下:
1.admin/include/watermark.class.php里加入支持透明背景png水印的函数(网上找到的)
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){ $opacity=$pct; // getting the watermark width $w = imagesx($src_im); // getting the watermark height $h = imagesy($src_im); // creating a cut resource $cut = imagecreatetruecolor($src_w, $src_h); // copying that section of the background to the cut imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h); // inverting the opacity $opacity = $opacity;//100 - $opacity; // placing the watermark now imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h); imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opacity); }
imagecopymerge($src_image,$met_image,$met_image_x,$met_image_y,0,0,$met_image_w,$met_image_h,$this->met_image_transition);替换成
if(strpos($this->met_image_name,'.png')!==false){ $this->imagecopymerge_alpha($src_image,$met_image,$met_image_x,$met_image_y,0,0,$met_image_w,$met_image_h,$this->met_image_transition); }else{ imagecopymerge($src_image,$met_image,$met_image_x,$met_image_y,0,0,$met_image_w,$met_image_h,$this->met_image_transition); }也就是如果是透明背景的png水印图时调用我们新加进去的函数。
测试了下,成功。