Example #1
0
 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);
 }
Example #2
0
 /**
  * 画一条线
  * @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;
 }
Example #4
0
 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;
 }
Example #5
0
 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);
     }
 }
Example #6
0
 /**
  * 设置图片水印
  * @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);
 }