nginx
配置代理
location ~ /image/.*\.(gif|jpg|jpeg|png)$ {
proxy_pass http://127.0.0.1:8888/test/watermark?url=$request_uri;
}
/img/
匹配要代理的目錄字首,$request_uri
引數為訪問的圖片路徑。
php
水印類
/** 水印類
* Class Watermark
* @package app\test
*/
class Watermark
{
/** 合成圖片水印
* @param string $dstImage 原圖片
* @param string $waterImg 水印圖
*/
public static function imageMarking($dstImage, $waterImg){
//獲取圖片資訊
$dstInfo = getimagesize($dstImage);
$waterInfo = getimagesize($waterImg);
//建立影像
$dstImgObj = self::imageCreateFrom($dstImage, $dstInfo[2]);
$waterImgObj = self::imageCreateFrom($waterImg, $waterInfo[2]);
//合成水印
imagecopyresized($dstImgObj,$waterImgObj,0, 0,0,0,$dstInfo[0], $dstInfo[1],$waterInfo[0],$waterInfo[1]);
//輸出圖片
self::imageOut($dstImgObj,$waterInfo[2]);
//銷燬資源物件
imagedestroy($dstImgObj);
imagedestroy($waterImgObj);
}
/** 生成圖片物件
* @param string $imgFile 圖片路徑
* @param string $type 圖片型別
* @return false|\GdImage|resource
*/
private static function imageCreateFrom($imgFile, $type) {
switch ($type) {
case IMAGETYPE_GIF:
return imagecreatefromgif($imgFile);
case IMAGETYPE_JPEG:
return imagecreatefromjpeg($imgFile);
case IMAGETYPE_PNG:
return imagecreatefrompng($imgFile);
default : //其他格式
}
}
/** 輸出圖片
* @param string $imageObj
* @param string $type
*/
private static function imageOut($imageObj,$type){
switch ($type) {
case 1:
header("Content-Type: image/gif");
imagegif($imageObj);
break;
case 2:
header("Content-Type: image/jpeg");
imagejpeg($imageObj);
break;
case 3:
header("Content-Type: image/png");
imagepng($imageObj);
break;
default: //其他格式
}
}
}
呼叫示例
public function watermark(){
//圖片路徑字首
$image = '/data/img/' . input('url');
self::imageMarking($image,'watermark.png');
exit;
}
nginx
水平好的,可以試著用 http_image_filter_module
模組來加水印, 我這也是無奈之舉
本作品採用《CC 協議》,轉載必須註明作者和本文連結