imagick php 缩放,php使用imagick模块实现图片缩放、裁剪、压缩示例
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模块实现图片缩放、裁剪、压缩示例相关推荐
- android缩放组件,Android控件实现图片缩放功能
1 简介 先来一张效果图 TIM图片.gif 上图中灰色的一块是ImageView控件,ImageView中的图片进行左右上下移动,以及双指缩放. 对于android控件的缩放移动,点这里----an ...
- php+imagick详解,PHP中imagick函数的中文解释_php技巧
imagick的:: adaptiveBlurImage - 增加了自适应模糊滤镜图像 imagick的:: adaptiveResizeImage - 自适应调整图像数据依赖三角 imagick的: ...
- Android安卓开发中图片缩放讲解
安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...
- 网页图片缩放的深入剖析
一.浏览器图片缩放默认表现行为行为 在想出解决方案之前,首先要弄清楚浏览器对于图片尺寸是怎么处理的,稍安勿躁,一步一步来分析下. 一个图片可以改变成任意尺寸,容器是80%: <div>&l ...
- 数字图像处理笔记二 - 图片缩放(最近邻插值(Nearest Neighbor interpolation))
图片缩放的两种常见算法: 最近邻域内插法(Nearest Neighbor interpolation) 双向性内插法(bilinear interpolation) 本文主要讲述最近邻插值(Near ...
- PHP图片裁剪_图片缩放_PHP生成缩略图
2019独角兽企业重金招聘Python工程师标准>>> 在制作网页过程中,为了排版整齐美观,对网页中的图片处理成固定大小尺寸的图片,或是要截去图片边角中含有水印的图片,对于图片量多, ...
- PHP实现将任意尺寸的图片裁剪后等比缩放到任意尺寸的透明图片上,并实现图片翻转...
类库地址 github.com/jinqiubj/Pi- 此类库满足以下需求 将任意尺寸的图片等比缩放到任意尺寸的透明图片上,如图1是一张200*200的正方形图片. 在等比缩放的同时,此类库可根据图 ...
- php实现图片缩放功能类
2019独角兽企业重金招聘Python工程师标准>>> Images类是一个图片处理类,实现了图片缩放类. 代码: <?php /*** Images类是一个图片处理类* @p ...
- [转]图片自动缩放 js图片缩放
转自:http://hi.baidu.com/crystalhx/blog/item/deba9b2320274340ac34de09.html 图片自动缩放 js图片缩放 2008-03-27 10 ...
最新文章
- Git Fetch vs Pull:Git Fetch和Git Pull命令之间有什么区别?
- 缓存核心知识小抄,面试必备,赶紧收藏!
- SpringMvc+AngularJS通过CORS实现跨域方案
- 抓包工具- fiddler的安装
- 特朗普为何喜欢马云?阿里巴巴开始拯救美国企业
- 指针 数组指针 指针数组 函数指针等说明。
- “我不是个优秀的 Web 开发人员,我只是擅长搜索谷歌”
- 个人博客网站建设_利用Github+Jeklly搭建个人博客网站
- web前端开发示例_40多个针对Web开发人员HTML5教程和示例
- 一般性网络错误 请检查网络文档_“网络工程团队”公众号投稿须知!
- 蔬菜大棚原理_温室大棚的原理是什么?
- 新的默认设置:Sass颜色同义词库
- 谁“杀死”了杀毒软件
- ubuntu 安装postgresql 客户端 psql 以及运行相关命令
- 植被农业数据下载网站整理
- 机器视觉之表面缺陷检测
- 代数拓扑\集合拓扑\代数拓扑\拓扑关系\拓扑结构_笔记
- matlab中变量类型
- 计算机协会维修照片,照片门事件后,当年那个毁了陈冠希的电脑修理员,如今变成这样!...
- iconfont 新加图标( 在原有项目的图标库中加入新的图标)
热门文章
- java joda_java-Jodatime的开始时间和结束时间
- 服务器物理内存总是九十几,服务器物理内存使用率90以上
- 5调用外部浏览器打开代码_浏览器事件循环
- php项目私有化部署保护代码,ThinkPHP项目安全配置解决方案
- 有var d = new Date(‘20xx-m-09‘),可以设置为m+1月份的操作是?
- 单片机c语言参考文献最新,[2018年最新整理]10个单片机C语言实例.doc
- 使用aggregate在MongoDB中查找重复的数据记录
- 纯CSS实现圆角边框
- 微信小程序 引用其他js里的方法
- TypeScript中怎么用接口(interface)描述类(静态部分与实例部分)