public function watermark($file, $mark_image, $set) { $sourceWand = NewMagickWand(); $compositeWand = NewMagickWand(); MagickReadImage($compositeWand, $mark_image); MagickReadImage($sourceWand, $file); MagickSetImageIndex($compositeWand, 0); MagickSetImageType($compositeWand, MW_TrueColorMatteType); MagickEvaluateImage($compositeWand, MW_SubtractEvaluateOperator, ($set['wm_opacity'] ? $set['wm_opacity'] : 50) / 100, MW_OpacityChannel); MagickCompositeImage($sourceWand, $compositeWand, MW_ScreenCompositeOp, $set['dest_x'], $set['dest_y']); MagickWriteImage($sourceWand, $file); }
/** * 画一条线 * @param int $sx 起始坐标x * @param int $sy 起始坐标y * @param int $ex 终止坐标y * @param int $ey 终止坐标y * @param int $border 线条宽度 */ public function drawLine($sx, $sy, $ex, $ey, $property = array()) { $width = $this->getWidth(); $height = $this->getHeight(); $color = NewPixelWand(isset($property['color']) ? $property['color'] : 'black'); $fillColor = NewPixelWand(isset($property['fillColor']) ? $property['fillColor'] : 'none'); $backgroundColor = NewPixelWand(isset($property['fillColor']) ? $property['backgroundColor'] : 'none'); $picWand = NewMagickWand(); MagickNewImage($picWand, $width, $height, $backgroundColor); $drawWand = NewDrawingWand(); DrawSetFillColor($drawWand, $fillColor); DrawSetStrokeWidth($drawWand, isset($property['borderWidth']) ? $property['borderWidth'] : 1); DrawSetStrokeColor($drawWand, $color); if (isset($property['stroke'])) { DrawSetStrokeDashArray($drawWand, $property['stroke']); } DrawLine($drawWand, $sx, $sy, $ex, $ey); MagickDrawImage($picWand, $drawWand); return MagickCompositeImage(self::$resource, $picWand, MW_OverCompositeOp, $x, $y); }
/** * Crop the image * * @param Asido_TMP &$tmp * @param integer $x * @param integer $y * @param integer $width * @param integer $height * @return boolean * @access protected */ function __crop(&$tmp, $x, $y, $width, $height) { if (!MagickCropImage($tmp->target, $width, $height, $x, $y)) { return false; } $t = NewMagickWand(); MagickNewImage($t, $width, $height); if (!MagickCompositeImage($t, $tmp->target, MW_OverCompositeOp, 0, 0)) { return false; } $this->__destroy_target($tmp); $tmp->target = $t; $tmp->image_width = $width; $tmp->image_height = $height; return true; }
function createWaterMark($src_image = "") { if (!IsMagickWand($src_image)) { $src_image = NewMagickWand(); MagickReadImage($src_image, $this->src_image_name); } if (!$src_image) { return false; } $src_image_w = MagickGetImageWidth($src_image); $src_image_h = MagickGetImageHeight($src_image); if ($this->wm_image_name) { $wm_image_info = $this->getInfo($this->wm_image_name); if (!$wm_image_info) { return false; } $wm_image = NewMagickWand(); MagickReadImage($wm_image, $this->wm_image_name); $wm_image_w = MagickGetImageWidth($wm_image); $wm_image_h = MagickGetImageHeight($wm_image); $temp_wm_image = $this->getPos($src_image_w, $src_image_h, $this->wm_image_pos, $wm_image); $wm_image_x = $temp_wm_image["dest_x"]; $wm_image_y = $temp_wm_image["dest_y"]; $opacity0 = MagickGetQuantumRange(); $opacity100 = 0; $opacitypercent = $this->wm_image_transition; $opacity = $opacity0 - $opacity0 * $opacitypercent / 100; if ($opacity > $opacity0) { $opacity = $opacity0; } elseif ($opacity < 0) { $opacity = 0; } MagickSetImageIndex($wm_image, 0); MagickSetImageType($wm_image, MW_TrueColorMatteType); MagickEvaluateImage($wm_image, MW_SubtractEvaluateOperator, $opacity, MW_OpacityChannel); MagickCompositeImage($src_image, $wm_image, MW_OverCompositeOp, $wm_image_x, $wm_image_y); } if ($this->wm_text) { $this->wm_text = $this->wm_text; $temp_wm_text = $this->getPos($src_image_w, $src_image_h, $this->wm_image_pos); $wm_text_x = $temp_wm_text["dest_x"]; $wm_text_y = $temp_wm_text["dest_y"]; $drawing_wand = NewDrawingWand(); if ($this->wm_text_font != "") { DrawSetFont($drawing_wand, $this->wm_text_font); } DrawSetFontSize($drawing_wand, $this->wm_text_size); switch ($this->wm_image_pos) { case 0: DrawSetGravity($drawing_wand, MW_CenterGravity); break; case 1: DrawSetGravity($drawing_wand, MW_NorthWestGravity); break; case 2: DrawSetGravity($drawing_wand, MW_NorthEastGravity); break; case 3: DrawSetGravity($drawing_wand, MW_SouthEastGravity); break; case 4: DrawSetGravity($drawing_wand, MW_SouthWestGravity); break; case 5: DrawSetGravity($drawing_wand, MW_NorthGravity); break; case 6: DrawSetGravity($drawing_wand, MW_EastGravity); break; case 7: DrawSetGravity($drawing_wand, MW_SouthGravity); break; case 8: DrawSetGravity($drawing_wand, MW_WestGravity); break; default: DrawSetGravity($drawing_wand, MW_CenterGravity); break; } $pixel_wand = NewPixelWand(); if (preg_match("/([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])/i", $this->wm_text_color, $color)) { $red = hexdec($color[1]); $green = hexdec($color[2]); $blue = hexdec($color[3]); PixelSetColor($pixel_wand, "rgb({$red},{$green},{$blue})"); } else { PixelSetColor($pixel_wand, "rgb(255,255,255)"); } DrawSetFillColor($drawing_wand, $pixel_wand); MagickAnnotateImage($src_image, $drawing_wand, 0, 0, $this->wm_angle, $this->wm_text); } return $src_image; }
function image_watermark(&$imgmdl, $file, $set) { switch ($set['wm_type']) { case 'text': $mark_image = $set['wm_text_image']; break; case 'image': $mark_image = $set['wm_image']; break; default: return; } $mark_image = $imgmdl->fetch($mark_image); list($watermark_width, $watermark_height, $type) = getimagesize($mark_image); list($src_width, $src_height) = getimagesize($file); list($dest_x, $dest_y) = self::get_watermark_dest($src_width, $src_height, $watermark_width, $watermark_height, $set['wm_loc']); if (function_exists('NewMagickWand')) { $sourceWand = NewMagickWand(); $compositeWand = NewMagickWand(); MagickReadImage($compositeWand, $mark_image); MagickReadImage($sourceWand, $file); MagickSetImageIndex($compositeWand, 0); MagickSetImageType($compositeWand, MW_TrueColorMatteType); MagickEvaluateImage($compositeWand, MW_SubtractEvaluateOperator, ($set['wm_opacity'] ? $set['wm_opacity'] : 50) / 100, MW_OpacityChannel); MagickCompositeImage($sourceWand, $compositeWand, MW_ScreenCompositeOp, $dest_x, $dest_y); MagickWriteImage($sourceWand, $file); } elseif (method_exists(image_clip, 'imagecreatefrom')) { $sourceimage = self::imagecreatefrom($file); $watermark = self::imagecreatefrom($mark_image); imagecolortransparent($watermark, imagecolorat($watermark, 0, 0)); imagealphablending($watermark, 1); if ($type == IMAGETYPE_PNG) { imagecopy($sourceimage, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); } else { imagecopymerge($sourceimage, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $set['wm_opacity'] ? $set['wm_opacity'] : 100); } imagejpeg($sourceimage, $file); imagedestroy($sourceimage); imagedestroy($watermark); } }
/** * 设置图片水印 * @param object image 实体对象 * @param string 文件路径 * @param array 设置的集合 * @return null */ function image_watermark(&$imgmdl, $file, $set) { switch ($set['wm_type']) { case 'text': $mark_image = $set['wm_text_image']; break; case 'image': $mark_image = $set['wm_image']; break; default: return; } if ($set['wm_text_preview']) { $mark_image = $set['wm_text_image']; } else { $mark_image = $imgmdl->fetch($mark_image); } list($watermark_width, $watermark_height, $type) = getimagesize($mark_image); list($src_width, $src_height) = getimagesize($file); list($dest_x, $dest_y) = self::get_watermark_dest($src_width, $src_height, $watermark_width, $watermark_height, $set['wm_loc']); if (ECAE_MODE) { include_lib('image.php'); $obj = new ecae_image(); $obj->set_file($file); $obj->watermark(file_get_contents($mark_image), $dest_x, $dest_y, 0, 0, $set['wm_opacity'] ? $set['wm_opacity'] : 50); $content = $obj->exec(); if ($content) { file_put_contents($file, $content); } } elseif (function_exists('NewMagickWand')) { $sourceWand = NewMagickWand(); $compositeWand = NewMagickWand(); MagickReadImage($compositeWand, $mark_image); MagickReadImage($sourceWand, $file); MagickSetImageIndex($compositeWand, 0); MagickSetImageType($compositeWand, MW_TrueColorMatteType); MagickEvaluateImage($compositeWand, MW_SubtractEvaluateOperator, ($set['wm_opacity'] ? $set['wm_opacity'] : 50) / 100, MW_OpacityChannel); MagickCompositeImage($sourceWand, $compositeWand, MW_ScreenCompositeOp, $dest_x, $dest_y); MagickWriteImage($sourceWand, $file); } elseif (method_exists(image_clip, 'imagecreatefrom')) { $sourceimage = self::imagecreatefrom($file); $watermark = self::imagecreatefrom($mark_image); imagecolortransparent($watermark, imagecolorat($watermark, 0, 0)); imagealphablending($watermark, 1); $set['wm_opacity'] = intval($set['wm_opacity']); imagecopymerge($sourceimage, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $set['wm_opacity']); imagejpeg($sourceimage, $file); imagedestroy($sourceimage); imagedestroy($watermark); } @unlink($mark_image); }