700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > PHP Imagick 缩放 裁剪 压缩图片

PHP Imagick 缩放 裁剪 压缩图片

时间:2023-09-25 00:40:26

相关推荐

PHP Imagick 缩放 裁剪 压缩图片

php教程|php手册

PHP,Imagick,缩放,裁剪,压缩,图片,PHP,使用

php教程-php手册

淘宝手机模板源码下载,手机怎么运行VScode,Ubuntu看raw,tomcat配置软连接,爬虫 字符,php jpeglib,谷歌seo排名系统,蚂蚁分类信息网站源码下载,游戏asp网站模板下载lzw

PHP使用Imagick模块缩放,裁剪,压缩图片包括gif图片 无 /** * 图片裁剪 * 裁剪规则: * 1. 高度为空或为零 按宽度缩放 高度自适应 * 2. 宽度为空或为零 按高度缩放 宽度自适应 * 3. 宽度,高度到不为空或为零 按宽高比例等比例缩放裁剪 默认从头部居中裁剪 *

php源码 微信 开源,vscode怎么创建uni项目,ubuntu经常重启,tomcat容器有哪些,手机web爬虫,php递归返回值,广东短视频seo怎么推广,php源码购物网站,jquery 插件开发模板lzw

知识付费app源码下载,ubuntu配置网卡2,爬虫的基因密码,php培训多少钱php吧,hyein seo滤镜lzw

PHP 使用Imagick模块 缩放,裁剪,压缩图片 包括gif图片

.CodeEntity .code_pieces ul.piece_anchor{width:25px;position:absolute;top:25px;left:-30px;z-index:1000;}.CodeEntity .code_pieces ul.piece_anchor li{width:25px;background: #efe;margin-bottom:2px;}.CodeEntity .code_pieces ul.piece_anchor li{border-left:3px #40AA63 solid;border-right:3px #efe solid;}.CodeEntity .code_pieces ul.piece_anchor li:hover{border-right:3px #40AA63 solid;border-left:3px #efe solid;}.CodeEntity .code_pieces ul.piece_anchor li a{color: #333;padding: 3px 10px;}.CodeEntity .code_pieces .jump_to_code{visibility:hidden;position:relative;}.CodeEntity .code_pieces .code_piece:hover .jump_to_code{visibility:visible;}.CodeEntity .code_pieces .code_piece:hover .jump_to_code a{text-decoration:none;}.CodeEntity .code_pieces h2 i{float:right;font-style:normal;font-weight:normal;}.CodeEntity .code_pieces h2 i a{font-size:9pt;background: #FFFFFF;color:#00A;padding: 2px 5px;text-decoration:none;}

/** * 图片裁剪 * 裁剪规则: * 1. 高度为空或为零 按宽度缩放 高度自适应 * 2. 宽度为空或为零 按高度缩放 宽度自适应 *3. 宽度,高度到不为空或为零 按宽高比例等比例缩放裁剪 默认从头部居中裁剪 * @param number $width * @param number $height */public function resize($width=0, $height=0){if($width==0 && $height==0){return;}$color = \;// gba(255,255,255,1);$size = $this->image->getImagePage ();//原始宽高$src_width = $size [width];$src_height = $size [height];//按宽度缩放 高度自适应if($width!=0 && $height==0){if($src_width>$width){$height = intval($width*$src_height/$src_width);if ($this->type == gif) {$this->_resizeGif($width, $height);}else{$this->image->thumbnailImage ( $width, $height, true );}}return;}//按高度缩放 宽度自适应if($width==0 && $height!=0){if($src_height>$height){$width = intval($src_width*$height/$src_height);if ($this->type == gif) {$this->_resizeGif($width, $height);}else{$this->image->thumbnailImage ( $width, $height, true );}}return;}//缩放的后的尺寸$crop_w = $width;$crop_h = $height;//缩放后裁剪的位置$crop_x = 0;$crop_y = 0;if(($src_width/$src_height) type == gif) {$this->_resizeGif($crop_w, $crop_h, true, $width, $height,$crop_x, $crop_y);} else {$this->image->thumbnailImage ( $crop_w, $crop_h, true );$this->image->cropImage($width, $height,$crop_x, $crop_y);}}

/** * 处理gif图片 需要对每一帧图片处理 * @param unknown $t_w 缩放宽 * @param unknown $t_h 缩放高 * @param string $isCrop 是否裁剪 * @param number $c_w 裁剪宽 * @param number $c_h 裁剪高 * @param number $c_x 裁剪坐标 x * @param number $c_y 裁剪坐标 y */private function _resizeGif($t_w, $t_h, $isCrop=false, $c_w=0, $c_h=0, $c_x=0, $c_y=0){$dest = new Imagick();$color_transparent = new ImagickPixel("transparent");//透明色foreach($this->image as $img){$page = $img->getImagePage();$tmp = new Imagick();$tmp->newImage($page[width], $page[height], $color_transparent, gif);$tmp->compositeImage($img, Imagick::COMPOSITE_OVER, $page[x], $page[y]);$tmp->thumbnailImage ( $t_w, $t_h, true );if($isCrop){$tmp->cropImage($c_w, $c_h, $c_x, $c_y);}$dest->addImage($tmp);$dest->setImagePage($tmp->getImageWidth(), $tmp->getImageHeight(), 0, 0);$dest->setImageDelay($img->getImageDelay());$dest->setImageDispose($img->getImageDispose());}$this->image->destroy ();$this->image = $dest;}

// 保存到指定路径public function save_to($path) {//压缩图片质量$this->image->setImageFormat(JPEG);$this->image->setImageCompression(Imagick::COMPRESSION_JPEG);$a = $this->image->getImageCompressionQuality() * 0.60;if ($a == 0) {$a = 60;}$this->image->setImageCompressionQuality($a);$this->image->stripImage();if ($this->type == gif) {$this->image->writeImages ( $path, true );} else {$this->image->writeImage ( $path );}}

image !== null)$this->image->destroy ();}public function init(){}// 载入图像public function open($path) {$this->image = new Imagick ( $path );if ($this->image) {$this->type = strtolower ( $this->image->getImageFormat () );}return $this->image;}/** * 图片裁剪 * 裁剪规则: * 1. 高度为空或为零 按宽度缩放 高度自适应 * 2. 宽度为空或为零 按高度缩放 宽度自适应 *3. 宽度,高度到不为空或为零 按宽高比例等比例缩放裁剪 默认从头部居中裁剪 * @param number $width * @param number $height */public function resize($width=0, $height=0){if($width==0 && $height==0){return;}$color = \;// gba(255,255,255,1);$size = $this->image->getImagePage ();//原始宽高$src_width = $size [width];$src_height = $size [height];//按宽度缩放 高度自适应if($width!=0 && $height==0){if($src_width>$width){$height = intval($width*$src_height/$src_width);if ($this->type == gif) {$this->_resizeGif($width, $height);}else{$this->image->thumbnailImage ( $width, $height, true );}}return;}//按高度缩放 宽度自适应if($width==0 && $height!=0){if($src_height>$height){$width = intval($src_width*$height/$src_height);if ($this->type == gif) {$this->_resizeGif($width, $height);}else{$this->image->thumbnailImage ( $width, $height, true );}}return;}//缩放的后的尺寸$crop_w = $width;$crop_h = $height;//缩放后裁剪的位置$crop_x = 0;$crop_y = 0;if(($src_width/$src_height) type == gif) {$this->_resizeGif($crop_w, $crop_h, true, $width, $height,$crop_x, $crop_y);} else {$this->image->thumbnailImage ( $crop_w, $crop_h, true );$this->image->cropImage($width, $height,$crop_x, $crop_y);}}/** * 处理gif图片 需要对每一帧图片处理 * @param unknown $t_w 缩放宽 * @param unknown $t_h 缩放高 * @param string $isCrop 是否裁剪 * @param number $c_w 裁剪宽 * @param number $c_h 裁剪高 * @param number $c_x 裁剪坐标 x * @param number $c_y 裁剪坐标 y */private function _resizeGif($t_w, $t_h, $isCrop=false, $c_w=0, $c_h=0, $c_x=0, $c_y=0){$dest = new Imagick();$color_transparent = new ImagickPixel("transparent");//透明色foreach($this->image as $img){$page = $img->getImagePage();$tmp = new Imagick();$tmp->newImage($page[width], $page[height], $color_transparent, gif);$tmp->compositeImage($img, Imagick::COMPOSITE_OVER, $page[x], $page[y]);$tmp->thumbnailImage ( $t_w, $t_h, true );if($isCrop){$tmp->cropImage($c_w, $c_h, $c_x, $c_y);}$dest->addImage($tmp);$dest->setImagePage($tmp->getImageWidth(), $tmp->getImageHeight(), 0, 0);$dest->setImageDelay($img->getImageDelay());$dest->setImageDispose($img->getImageDispose());}$this->image->destroy ();$this->image = $dest;}/** * 更改图像大小 * $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) {//压缩图片质量$this->image->setImageFormat(JPEG);$this->image->setImageCompression(Imagick::COMPRESSION_JPEG);$a = $this->image->getImageCompressionQuality() * 0.60;if ($a == 0) {$a = 60;}$this->image->setImageCompressionQuality($a);$this->image->stripImage();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 get_file_size(){if($this->image){return 0;//$this->image->getImageLength(); getImageLength not find}else{return 0;}}public function get_file_type(){if($this->image){return $this->image->getimagemimetype();}else{return 0;}}public function get_sha1(){if($this->image){return sha1($this->image->__tostring());}else{return \;}}// 当前对象是否为图片public function is_image() {if ($this->image)return true;elsereturn false;}/* * 添加一个边框 $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 ();} // 垂直翻转}

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