1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF

PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF

时间:2021-08-21 17:07:40

相关推荐

PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF

后端开发|php教程

image,gt,height,width,this

后端开发-php教程

给骨头系统开发的图像库的 imagick 部分 ,支持 gif , 完美支持裁切、生成缩略图、添加水印 。

金融虚拟币源码,ubuntu上安装solc,爬虫需要的函数,slight php,站长seo资源lzw

支持按方位生成缩略图像, 如:

php网站源码中哪个是主页文件,ubuntu看网卡流量,tomcat6扩大内存,c winfrom爬虫,php怎么快速学习算法,纬高SEOlzw

// 把左上角优先$image->resize_to(100, 100, orth_west);// 右边优先$image->resize_to(100, 100, east);...

完整的php项目源码,ubuntu下更新源,tomcat+软件源代码,开源php爬虫,php批量操作,百度seo排名优化技术lzw

更多参数看源代码

原图

效果图:

调用方式:

include imagick.class.php; $image = new lib_image_imagick(); $image->open(a.jpg); $image->resize_to(100, 100, scale_fill); $image->add_text(\, 10, 20); $image->add_watermark(1024i.jpg, 10, 50); $image->save_to(x.jpg);

imagick.class.php

image!==null) $this->image->destroy(); } // 载入图像 public function open($path) { $this->image = new Imagick( $path ); if($this->image) { $this->type = strtolower($this->image->getImageFormat()); } return $this->image; } public function crop($x=0, $y=0, $width=null, $height=null) { if($width==null) $width = $this->image->getImageWidth()-$x; if($height==null) $height = $this->image->getImageHeight()-$y; if($width<=0 || $heighttype==gif) { $image = $this->image; $canvas = new Imagick(); $images = $image->coalesceImages(); foreach($images as $frame){ $img = new Imagick(); $img->readImageBlob($frame); $img->cropImage($width, $height, $x, $y); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); $canvas->setImagePage($width, $height, 0, 0); } $image->destroy(); $this->image = $canvas; } else { $this->image->cropImage($width, $height, $x, $y); } } /* * 更改图像大小 $fit: 适应大小方式 force: 把图片强制变形成 $width X $height 大小 scale: 按比例在安全框 $width X $height 内缩放图片, 输出缩放后图像大小 不完全等于 $width X $height scale_fill: 按比例在安全框 $width X $height 内缩放图片,安全框内没有像素的地方填充色, 使用此参数时可设置背景填充色 $bg_color = array(255,255,255)(红,绿,蓝, 透明度) 透明度(0不透明-127完全透明)) 其它: 智能模能 缩放图像并载取图像的中间部分 $width X $height 像素大小 $fit = force,scale,scale_fill 时: 输出完整图像 $fit = 图像方位值 时, 输出指定位置部分图像 字母与图像的对应关系如下: north_west north north_east west center east south_west south south_east */ public function resize_to($width = 100, $height = 100, $fit = center, $fill_color = array(255,255,255,0) ) { switch($fit) { case force: if($this->type==gif) { $image = $this->image; $canvas = new Imagick(); $images = $image->coalesceImages(); foreach($images as $frame){ $img = new Imagick(); $img->readImageBlob($frame); $img->thumbnailImage( $width, $height, false ); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); } $image->destroy(); $this->image = $canvas; } else { $this->image->thumbnailImage( $width, $height, false ); } break; case scale: if($this->type==gif) { $image = $this->image; $images = $image->coalesceImages(); $canvas = new Imagick(); foreach($images as $frame){ $img = new Imagick(); $img->readImageBlob($frame); $img->thumbnailImage( $width, $height, true ); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); } $image->destroy(); $this->image = $canvas; } else { $this->image->thumbnailImage( $width, $height, true ); } break; case scale_fill: $size = $this->image->getImagePage(); $src_width = $size[width]; $src_height = $size[height]; $x = 0; $y = 0; $dst_width = $width; $dst_height = $height; if($src_width*$height > $src_height*$width) { $dst_height = intval($width*$src_height/$src_width); $y = intval( ($height-$dst_height)/2 ); } else { $dst_width = intval($height*$src_width/$src_height); $x = intval( ($width-$dst_width)/2 ); } $image = $this->image; $canvas = new Imagick(); $color = gba(.$fill_color[0].,.$fill_color[1].,.$fill_color[2].,.$fill_color[3].); if($this->type==gif) { $images = $image->coalesceImages(); foreach($images as $frame) { $frame->thumbnailImage( $width, $height, true ); $draw = new ImagickDraw(); $draw->composite($frame->getImageCompose(), $x, $y, $dst_width, $dst_height, $frame); $img = new Imagick(); $img->newImage($width, $height, $color, gif); $img->drawImage($draw); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); $canvas->setImagePage($width, $height, 0, 0); } } else { $image->thumbnailImage( $width, $height, true ); $draw = new ImagickDraw(); $draw->composite($image->getImageCompose(), $x, $y, $dst_width, $dst_height, $image); $canvas->newImage($width, $height, $color, $this->get_type() ); $canvas->drawImage($draw); $canvas->setImagePage($width, $height, 0, 0); } $image->destroy(); $this->image = $canvas; break; default: $size = $this->image->getImagePage(); $src_width = $size[width]; $src_height = $size[height]; $crop_x = 0; $crop_y = 0; $crop_w = $src_width; $crop_h = $src_height; if($src_width*$height > $src_height*$width) { $crop_w = intval($src_height*$width/$height); } else { $crop_h = intval($src_width*$height/$width); } switch($fit) { case orth_west: $crop_x = 0; $crop_y = 0; break; case orth: $crop_x = intval( ($src_width-$crop_w)/2 ); $crop_y = 0; break; case orth_east: $crop_x = $src_width-$crop_w; $crop_y = 0; break; case west: $crop_x = 0; $crop_y = intval( ($src_height-$crop_h)/2 ); break; case center: $crop_x = intval( ($src_width-$crop_w)/2 ); $crop_y = intval( ($src_height-$crop_h)/2 ); break; case east: $crop_x = $src_width-$crop_w; $crop_y = intval( ($src_height-$crop_h)/2 ); break; case south_west: $crop_x = 0; $crop_y = $src_height-$crop_h; break; case south: $crop_x = intval( ($src_width-$crop_w)/2 ); $crop_y = $src_height-$crop_h; break; case south_east: $crop_x = $src_width-$crop_w; $crop_y = $src_height-$crop_h; break; default: $crop_x = intval( ($src_width-$crop_w)/2 ); $crop_y = intval( ($src_height-$crop_h)/2 ); } $image = $this->image; $canvas = new Imagick(); if($this->type==gif) { $images = $image->coalesceImages(); foreach($images as $frame){ $img = new Imagick(); $img->readImageBlob($frame); $img->cropImage($crop_w, $crop_h, $crop_x, $crop_y); $img->thumbnailImage( $width, $height, true ); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); $canvas->setImagePage($width, $height, 0, 0); } } else { $image->cropImage($crop_w, $crop_h, $crop_x, $crop_y); $image->thumbnailImage( $width, $height, true ); $canvas->addImage( $image ); $canvas->setImagePage($width, $height, 0, 0); } $image->destroy(); $this->image = $canvas; } } // 添加水印图片 public function add_watermark($path, $x = 0, $y = 0) { $watermark = new Imagick($path); $draw = new ImagickDraw(); $draw->composite($watermark->getImageCompose(), $x, $y, $watermark->getImageWidth(), $watermark->getimageheight(), $watermark); if($this->type==gif) { $image = $this->image; $canvas = new Imagick(); $images = $image->coalesceImages(); foreach($image as $frame) { $img = new Imagick(); $img->readImageBlob($frame); $img->drawImage($draw); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); } $image->destroy(); $this->image = $canvas; } else { $this->image->drawImage($draw); } } // 添加水印文字 public function add_text($text, $x = 0 , $y = 0, $angle=0, $style=array()) { $draw = new ImagickDraw(); if(isset($style[font])) $draw->setFont($style[font]); if(isset($style[font_size])) $draw->setFontSize($style[font_size]); if(isset($style[fill_color])) $draw->setFillColor($style[fill_color]); if(isset($style[under_color])) $draw->setTextUnderColor($style[under_color]); if($this->type==gif) { foreach($this->image as $frame) { $frame->annotateImage($draw, $x, $y, $angle, $text); } } else { $this->image->annotateImage($draw, $x, $y, $angle, $text); } } // 保存到指定路径 public function save_to( $path ) { if($this->type==gif) { $this->image->writeImages($path, true); } else { $this->image->writeImage($path); } } // 输出图像 public function output($header = true) { if($header) header(Content-type: .$this->type); echo $this->image->getImagesBlob(); } public function get_width() { $size = $this->image->getImagePage(); return $size[width]; } public function get_height() { $size = $this->image->getImagePage(); return $size[height]; } // 设置图像类型, 默认与源类型一致 public function set_type( $type=png ) { $this->type = $type; $this->image->setImageFormat( $type ); } // 获取源图像类型 public function get_type() { return $this->type; } // 当前对象是否为图片 public function is_image() { if( $this->image ) return true; else return false; } public function thumbnail($width = 100, $height = 100, $fit = true){ $this->image->thumbnailImage( $width, $height, $fit );} // 生成缩略图 $fit为真时将保持比例并在安全框 $width X $height 内生成缩略图片 /* 添加一个边框 $width: 左右边框宽度 $height: 上下边框宽度 $color: 颜色: RGB 颜色 gb(255,0,0) 或 16进制颜色 #FF0000 或颜色单词 white/ ed... */ public function border($width, $height, $color= gb(220, 220, 220)) { $color=new ImagickPixel(); $color->setColor($color); $this->image->borderImage($color, $width, $height); } public function blur($radius, $sigma){$this->image->blurImage($radius, $sigma);} // 模糊 public function gaussian_blur($radius, $sigma){$this->image->gaussianBlurImage($radius, $sigma);} // 高斯模糊 public function motion_blur($radius, $sigma, $angle){$this->image->motionBlurImage($radius, $sigma, $angle);} // 运动模糊 public function radial_blur($radius){$this->image->radialBlurImage($radius);} // 径向模糊 public function add_noise($type=null){$this->image->addNoiseImage($type==null?imagick::NOISE_IMPULSE:$type);} // 添加噪点 public function level($black_point, $gamma, $white_point){$this->image->levelImage($black_point, $gamma, $white_point);} // 调整色阶 public function modulate($brightness, $saturation, $hue){$this->image->modulateImage($brightness, $saturation, $hue);} // 调整亮度、饱和度、色调 public function charcoal($radius, $sigma){$this->image->charcoalImage($radius, $sigma);} // 素描 public function oil_paint($radius){$this->image->oilPaintImage($radius);} // 油画效果 public function flop(){$this->image->flopImage();} // 水平翻转 public function flip(){$this->image->flipImage();} // 垂直翻转 }

以上就介绍了PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF,包括了方面的内容,希望对PHP教学有兴趣的朋友有所帮助。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。