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

缩放 裁剪

代码如下:

/**

* 图片裁剪

* 裁剪规则:

*   1. 高度为空或为零   按宽度缩放 高度自适应

*   2. 宽度为空或为零  按高度缩放 宽度自适应

*      3. 宽度,高度到不为空或为零  按宽高比例等比例缩放裁剪  默认从头部居中裁剪

* @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'];

//按宽度缩放 高度自适应

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

//宽高比例小于目标宽高比例  宽度等比例放大      按目标高度从头部截取

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

//从顶部裁剪  不用计算 $crop_y

}else{

//宽高比例大于目标宽高比例   高度等比例放大      按目标宽度居中裁剪

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

}

}

针对gif图片的处理方法

代码如下:

/**

* 处理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 );

}

}

ImagickService.php

代码如下:

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

  1. android缩放组件,Android控件实现图片缩放功能

    1 简介 先来一张效果图 TIM图片.gif 上图中灰色的一块是ImageView控件,ImageView中的图片进行左右上下移动,以及双指缩放. 对于android控件的缩放移动,点这里----an ...

  2. php+imagick详解,PHP中imagick函数的中文解释_php技巧

    imagick的:: adaptiveBlurImage - 增加了自适应模糊滤镜图像 imagick的:: adaptiveResizeImage - 自适应调整图像数据依赖三角 imagick的: ...

  3. Android安卓开发中图片缩放讲解

    安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...

  4. 网页图片缩放的深入剖析

    一.浏览器图片缩放默认表现行为行为 在想出解决方案之前,首先要弄清楚浏览器对于图片尺寸是怎么处理的,稍安勿躁,一步一步来分析下. 一个图片可以改变成任意尺寸,容器是80%: <div>&l ...

  5. 数字图像处理笔记二 - 图片缩放(最近邻插值(Nearest Neighbor interpolation))

    图片缩放的两种常见算法: 最近邻域内插法(Nearest Neighbor interpolation) 双向性内插法(bilinear interpolation) 本文主要讲述最近邻插值(Near ...

  6. PHP图片裁剪_图片缩放_PHP生成缩略图

    2019独角兽企业重金招聘Python工程师标准>>> 在制作网页过程中,为了排版整齐美观,对网页中的图片处理成固定大小尺寸的图片,或是要截去图片边角中含有水印的图片,对于图片量多, ...

  7. PHP实现将任意尺寸的图片裁剪后等比缩放到任意尺寸的透明图片上,并实现图片翻转...

    类库地址 github.com/jinqiubj/Pi- 此类库满足以下需求 将任意尺寸的图片等比缩放到任意尺寸的透明图片上,如图1是一张200*200的正方形图片. 在等比缩放的同时,此类库可根据图 ...

  8. php实现图片缩放功能类

    2019独角兽企业重金招聘Python工程师标准>>> Images类是一个图片处理类,实现了图片缩放类. 代码: <?php /*** Images类是一个图片处理类* @p ...

  9. [转]图片自动缩放 js图片缩放

    转自:http://hi.baidu.com/crystalhx/blog/item/deba9b2320274340ac34de09.html 图片自动缩放 js图片缩放 2008-03-27 10 ...

最新文章

  1. Git Fetch vs Pull:Git Fetch和Git Pull命令之间有什么区别?
  2. 缓存核心知识小抄,面试必备,赶紧收藏!
  3. SpringMvc+AngularJS通过CORS实现跨域方案
  4. 抓包工具- fiddler的安装
  5. 特朗普为何喜欢马云?阿里巴巴开始拯救美国企业
  6. 指针 数组指针 指针数组 函数指针等说明。
  7. “我不是个优秀的 Web 开发人员,我只是擅长搜索谷歌”
  8. 个人博客网站建设_利用Github+Jeklly搭建个人博客网站
  9. web前端开发示例_40多个针对Web开发人员HTML5教程和示例
  10. 一般性网络错误 请检查网络文档_“网络工程团队”公众号投稿须知!
  11. 蔬菜大棚原理_温室大棚的原理是什么?
  12. 新的默认设置:Sass颜色同义词库
  13. 谁“杀死”了杀毒软件
  14. ubuntu 安装postgresql 客户端 psql 以及运行相关命令
  15. 植被农业数据下载网站整理
  16. 机器视觉之表面缺陷检测
  17. 代数拓扑\集合拓扑\代数拓扑\拓扑关系\拓扑结构_笔记
  18. matlab中变量类型
  19. 计算机协会维修照片,照片门事件后,当年那个毁了陈冠希的电脑修理员,如今变成这样!...
  20. iconfont 新加图标( 在原有项目的图标库中加入新的图标)

热门文章

  1. java joda_java-Jodatime的开始时间和结束时间
  2. 服务器物理内存总是九十几,服务器物理内存使用率90以上
  3. 5调用外部浏览器打开代码_浏览器事件循环
  4. php项目私有化部署保护代码,ThinkPHP项目安全配置解决方案
  5. 有var d = new Date(‘20xx-m-09‘),可以设置为m+1月份的操作是?
  6. 单片机c语言参考文献最新,[2018年最新整理]10个单片机C语言实例.doc
  7. 使用aggregate在MongoDB中查找重复的数据记录
  8. 纯CSS实现圆角边框
  9. 微信小程序 引用其他js里的方法
  10. TypeScript中怎么用接口(interface)描述类(静态部分与实例部分)