Ueditor上传图片自动添加水印(通用图片文件)javascript
Ueditor上传图片自动添加水印(通用图片文件)...
1、找到config.json,在配置文件中新增水印效果
1 2 3 4 5 6 7 | /* 上传图片配置项 */ "imageWater" : "true" , /*******************新增图片水印设置 这里是新增*/ "imageActionName" : "uploadsimage" , /* 执行上传图片的action名称 */ "imageFieldName" : "upfile" , /* 提交的图片表单名称 * /* 上传图片配置项 */ "imageWater" : "true" , /*******************新增图片水印设置 这里是新增*/ "imageActionName" : "uploadsimage" , /* 执行上传图片的action名称 */ "imageFieldName" : "upfile" , /* 提交的图片表单名称 */ 复制代码/复制代码 |
2、找到php目录下的 action_uploads.php 文件
(1)在上传文件的时候读取配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* 上传配置 */ $base64 = "uploads" ; switch (htmlspecialchars($_GET[ 'action' ])) { case 'uploadsimage' : $config = array( "pathFormat" => $CONFIG[ 'imagePathFormat' ], "maxSize" => $CONFIG[ 'imageMaxSize' ], "allowFiles" => $CONFIG[ 'imageAllowFiles' ] ); $watermark = $CONFIG[ 'imageWater' ]; //************************新增读取参数 $fieldName = $CONFIG[ 'imageFieldName' ]; break ; case 'uploadsscrawl' : |
(2)在实例化的时候传入配置参数
1 | $up = new uploadser($fieldName, $config, $base64,$watermark); // 最后的参数是新增 |
3、找到php同级目录下的类 uploadser.class.php
(1)实例化类的时候新增私有属性
1 2 3 | class uploadser { private $water ; //是否添加水印(属性) *******************新增 |
(2)在构造函数中添加传递的参数,新增最后一个参数
1 2 3 4 | public function __construct( $fileField , $config , $type = "uploads" , $watermark = false) { $this ->water = $watermark ; $this ->fileField = $fileField ; |
(3)在文件上传完成之后 upFile方法 的最后添加
1 2 3 4 5 6 7 8 9 10 | //移动文件 if (!(move_uploadsed_file( $file [ "tmp_name" ], $this ->filePath) && file_exists ( $this ->filePath))) { //移动失败 $this ->stateInfo = $this ->getStateInfo( "ERROR_FILE_MOVE" ); } else { //移动成功 $this ->stateInfo = $this ->stateMap[0]; } //********************新增 if ( $this ->water ){ $this ->watermark( $this ->filePath, $this ->filePath); } |
(4)添加水印函数和检测文件是否存在函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | /* * 图片加水印 * $source string 图片资源 * $target string 添加水印后的名字 * $w_pos int 水印位置 具体看代码 * $w_img string 水印图片路径 * $w_text string 显示的文字 * $w_font int 字体大小 * $w_color string 字体颜色 */ private function watermark( $source , $target = '' , $w_pos = '' , $w_img = '' , $w_text = 'zhiwuhao.com' , $w_font = 10, $w_color = '#CC0000' ) { $this ->w_img = 'logo.png' ; //水印图片的路径 $this ->w_pos = 9; $this ->w_minwidth = 400; //最少宽度 $this ->w_minheight = 200; //最少高度 $this ->w_quality = 80; //图像质量 $this ->w_pct = 85; //透明度 $w_pos = $w_pos ? $w_pos : $this ->w_pos; $w_img = $w_img ? $w_img : $this ->w_img; if (! $this ->check( $source )) return false; if (! $target ) $target = $source ; $source_info = getimagesize ( $source ); //图片信息 $source_w = $source_info [0]; //图片宽度 $source_h = $source_info [1]; //图片高度 if ( $source_w < $this ->w_minwidth || $source_h < $this ->w_minheight) return false; switch ( $source_info [2]) { //图片类型 case 1 : //GIF格式 $source_img = imagecreatefromgif( $source ); break ; case 2 : //JPG格式 $source_img = imagecreatefromjpeg( $source ); break ; case 3 : //PNG格式 $source_img = imagecreatefrompng( $source ); //imagealphablending($source_img,false); //关闭混色模式 imagesavealpha( $source_img ,true); //设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息(与单一透明色相反) break ; default : return false; } if (! empty ( $w_img ) && file_exists ( $w_img )) { //水印图片有效 $ifwaterimage = 1; //标记 $water_info = getimagesize ( $w_img ); $width = $water_info [0]; $height = $water_info [1]; switch ( $water_info [2]) { case 1 : $water_img = imagecreatefromgif( $w_img ); break ; case 2 : $water_img = imagecreatefromjpeg( $w_img ); break ; case 3 : $water_img = imagecreatefrompng( $w_img ); imagealphablending( $w_img ,false); imagesavealpha( $w_img ,true); break ; default : return ; } } else { $ifwaterimage = 0; $temp = imagettfbbox( ceil ( $w_font *2.5), 0, '../../texb.ttf' , $w_text ); //imagettfbbox返回一个含有 8 个单元的数组表示了文本外框的四个角 $width = $temp [2] - $temp [6]; $height = $temp [3] - $temp [7]; unset( $temp ); } switch ( $w_pos ) { case 1: $wx = 5; $wy = 5; break ; case 2: $wx = ( $source_w - $width ) / 2; $wy = 0; break ; case 3: $wx = $source_w - $width ; $wy = 0; break ; case 4: $wx = 0; $wy = ( $source_h - $height ) / 2; break ; case 5: $wx = ( $source_w - $width ) / 2; $wy = ( $source_h - $height ) / 2; break ; case 6: $wx = $source_w - $width ; $wy = ( $source_h - $height ) / 2; break ; case 7: $wx = 0; $wy = $source_h - $height ; break ; case 8: $wx = ( $source_w - $width ) / 2; $wy = $source_h - $height ; break ; case 9: $wx = $source_w - ( $width +5); $wy = $source_h - ( $height +5); break ; case 10: $wx = rand(0,( $source_w - $width )); $wy = rand(0,( $source_h - $height )); break ; default : $wx = rand(0,( $source_w - $width )); $wy = rand(0,( $source_h - $height )); break ; } if ( $ifwaterimage ) { if ( $water_info [2] == 3) { imagecopy( $source_img , $water_img , $wx , $wy , 0, 0, $width , $height ); } else { imagecopymerge( $source_img , $water_img , $wx , $wy , 0, 0, $width , $height , $this ->w_pct); } } else { if (! empty ( $w_color ) && ( strlen ( $w_color )==7)) { $r = hexdec( substr ( $w_color ,1,2)); $g = hexdec( substr ( $w_color ,3,2)); $b = hexdec( substr ( $w_color ,5)); } else { return ; } imagestring( $source_img , $w_font , $wx , $wy , $w_text ,imagecolorallocate( $source_img , $r , $g , $b )); } switch ( $source_info [2]) { case 1 : imagegif( $source_img , $target ); //GIF 格式将图像输出到浏览器或文件(欲输出的图像资源, 指定输出图像的文件名) break ; case 2 : imagejpeg( $source_img , $target , $this ->w_quality); break ; case 3 : imagepng( $source_img , $target ); break ; default : return ; } if (isset( $water_info )){ unset( $water_info ); } if (isset( $water_img )) { imagedestroy( $water_img ); } unset( $source_info ); imagedestroy( $source_img ); return true; } /** * 检测文件是否存在 * @param $image * @return bool */ public function check( $image ){ return extension_loaded ( 'gd' ) && preg_match( "/\.(jpg|jpeg|gif|png)/i" , $image , $m ) && file_exists ( $image ) && function_exists( 'imagecreatefrom' .( $m [1] == 'jpg' ? 'jpeg' : $m [1])); } |
注意:以上代码会提示一个错误
imagealphablending() expects parameter 1 to be resource
imagesavealpha() expects parameter 1 to be resource
在这个位置:
这个错误是因为 imagealphablending() 和 imagesavealpha() 这两个函数需要传递一个图像资源作为参数,但是在代码中传递的参数 $w_img 是一个字符串(水印图片的路径),而不是一个图像资源。
你需要将这两个函数的参数改为 $water_img,也就是水印图片创建的图像资源。同时,你需要修改以下代码:
1 2 3 | $water_img = imagecreatefrompng( $w_img ); imagealphablending( $water_img , false); imagesavealpha( $water_img , true); |
修改后的代码如下:
1 2 3 | $water_img = imagecreatefrompng( $w_img ); imagealphablending( $source_img , false); imagesavealpha( $source_img , true); |
我要评论