日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

imagick php 缩放,php使用imagick模块实现图片缩放、裁剪、压缩示例

發(fā)布時(shí)間:2023/12/1 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 imagick php 缩放,php使用imagick模块实现图片缩放、裁剪、压缩示例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

PHP 使用Imagick模塊 縮放,裁剪,壓縮圖片 包括gif圖片

縮放 裁剪

代碼如下:

/**

* 圖片裁剪

* 裁剪規(guī)則:

* ??1. 高度為空或?yàn)榱?? 按寬度縮放 高度自適應(yīng)

* ??2. 寬度為空或?yàn)榱? 按高度縮放 寬度自適應(yīng)

*????? 3. 寬度,高度到不為空或?yàn)榱? 按寬高比例等比例縮放裁剪? 默認(rèn)從頭部居中裁剪

* @param number $width

* @param number $height

*/

public function resize($width=0, $height=0){

if($width==0 && $height==0){

return;

}

$color = '';// 'rgba(255,255,255,1)';

$size = $this->image->getImagePage ();

//原始寬高

$src_width = $size ['width'];

$src_height = $size ['height'];

//按寬度縮放 高度自適應(yīng)

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;

}

//按高度縮放 寬度自適應(yīng)

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) < ($width/$height)){

//寬高比例小于目標(biāo)寬高比例? 寬度等比例放大????? 按目標(biāo)高度從頭部截取

$crop_h = intval($src_height*$width/$src_width);

//從頂部裁剪? 不用計(jì)算 $crop_y

}else{

//寬高比例大于目標(biāo)寬高比例?? 高度等比例放大????? 按目標(biāo)寬度居中裁剪

$crop_w = intval($src_width*$height/$src_height);

$crop_x = intval(($crop_w-$width)/2);

}

if ($this->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);

}

}

針對(duì)gif圖片的處理方法

代碼如下:

/**

* 處理gif圖片 需要對(duì)每一幀圖片處理

* @param unknown $t_w? 縮放寬

* @param unknown $t_h? 縮放高

* @param string $isCrop? 是否裁剪

* @param number $c_w? 裁剪寬

* @param number $c_h? 裁剪高

* @param number $c_x? 裁剪坐標(biāo) x

* @param number $c_y? 裁剪坐標(biāo) 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;

}

保存時(shí)壓縮處理

代碼如下:

// 保存到指定路徑

public function save_to($path) {

//壓縮圖片質(zhì)量

$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 );

}

}

ImagickService.php

代碼如下:

總結(jié)

以上是生活随笔為你收集整理的imagick php 缩放,php使用imagick模块实现图片缩放、裁剪、压缩示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。