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

代码如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php实现第三方邮箱登录_PHP实现用户异地登录提醒功能的方法

有时候你的网站账号被盗或你在别处登录操作后台时&#xff0c;右下角会弹出提示信息&#xff0c;提醒你的账号异地登录&#xff0c;或者会被强制下线。对于这种安全性要求比较高的web网站&#xff0c;很多后台管理都会做这种功能提醒。甄别自己的账号是否被盗或者是否有另一个人…

课时47.datalist标签(了解)

1.datalist标签 作用&#xff1a;给输入框绑定待选项 2.datalist格式&#xff1a; <datalist> <option>待选项内容</option> </datalist> 3.如何给输入框绑定待选列表&#xff1f; 搞一个输入框搞一个datalist列表给datalist列表标签添加一个id给…

pandas.read_csv参数详解

读取CSV&#xff08;逗号分割&#xff09;文件到DataFrame也支持文件的部分导入和选择迭代更多帮助参见&#xff1a;http://pandas.pydata.org/pandas-docs/stable/io.html参数&#xff1a;filepath_or_buffer : str&#xff0c;pathlib。str, pathlib.Path, py._path.local.Lo…

Gradle – Maven的观点

正如我博客的读者所知道的&#xff0c; 我有点像Maven迷 。 我从2007年8月左右开始使用Maven&#xff0c;从没有回过头。 但是&#xff0c;就像其他所有情况一样&#xff0c;“变化是唯一不变的”。 现在这个领域还有其他参与者&#xff0c;Gradle看起来是最有前途的。 我决定试…

postgis安装_从零开始,构建电子地图网站:0_2_数据处理postgis

软件安装完&#xff0c;开始数据处理。从China Historical GIS下载一份数据。一、数据下载数据来源&#xff1a;China Historical GIS&#xff1a;https://sites.fas.harvard.edu/~chgis/data/chgis/v6/先下载一份时间序列数据&#xff1a;Download CHGIS V6 TIME SERIES Datah…

sar图像去噪matlab,一种基于总曲率的SAR图像变分去噪方法与流程

本发明属于数字图像处理技术领域&#xff0c;具体涉及一种基于总曲率的SAR图像变分去噪方法。背景技术&#xff1a;&#xff1a;相干斑噪声是合成孔径雷达(Synthetic Aperture Radar&#xff0c;简称SAR)图像的重要特征&#xff0c;严重影响SAR图像的可解译性。相干斑噪声通常作…

Linux下用netstat查看网络状态、端口状态

在linux一般使用netstat 来查看系统端口使用情况步。 netstat命令是一个监控TCP/IP网络的非常有用的工具&#xff0c;它可以显示路由表、实际的网络连接以及每一个网络接口设备的 netstat命令的功能是显示网络连接、路由表和网络接口信息&#xff0c;可以让用户得知目…

课时2.浏览器和服务器(了解)

1.什么是浏览器&#xff1f; 浏览器就是由安装在我们电脑上的一款软件&#xff0c;QQ&#xff0c;百度影音等一样&#xff0c;都是安装在电脑上的一款软件 那这些软件之间由什么区别呢&#xff1f; 它们的区别就是它们的功能不太一样&#xff0c;QQ是用来聊天的&#xff0c;…

微信自动回复

http://itchat.readthedocs.io/zh/latest/tutorial/tutorial0/。 这个是学习网址&#xff0c;到时候自己学一下。做个案例试试转载于:https://www.cnblogs.com/lilinzhiyu/p/7985864.html

python 定义变量_用python解决动态的定义变量名(并给其赋值方法:大数据处理)...

前言&#xff1a;今天为大家带来的内容是&#xff1a;用python解决动态的定义变量名(并给其赋值方法&#xff1a;大数据处理)具有很好的参考价值&#xff0c;希望对大家有所帮助。喜欢本文内容的记得点赞转发收藏不迷路哦&#xff01;&#xff01;&#xff01;最近消费kafka数据…

appcan php图片上传,appcan文件上传php,asp通用

首先说appcan内部实现了file标签&#xff0c;我们就不用纠结这个问题了&#xff0c;还提供了上传百分比哦&#xff0c;然后下面的方法按从上到下依次看&#xff0c;很简单。上传php&#xff0c;asp页面很简单 &#xff0c;接收‘file_data’这个文件信息就可以了&#xff0c;如…

javascript 动态修改css样式

方法一&#xff1a;改变外联css文件&#xff0c;这里不讲这个。 方法二&#xff1a;通过改变claaName来改变样式&#xff0c;语法&#xff1a; obj.className "style2";//或者obj.setAttribute("class", "style2"); 方法三&#xff1a;使用obj…

POJ 3225 Help with Intervals(线段树)

POJ 3225 Help with Intervals 题目链接 集合数字有的为1&#xff0c;没有为0&#xff0c;那么几种操作相应就是置为0或置为1或者翻转&#xff0c;这个随便推推就能够了&#xff0c;然后开闭区间的处理方式就是把区间扩大成两倍&#xff0c;偶数存点&#xff0c;奇数存线段就可…

在Spring中嵌入HSQLDB服务器实例

我一直在愉快地使用XAMPP进行开发&#xff0c;直到不得不将其托管在可通过Internet访问的某个地方&#xff0c;供客户端进行测试和使用。 我有一个仅具有384 RAM的VPS&#xff0c;并且需要快速找到一种方法&#xff0c;因此决定将XAMPP安装到VPS中。 由于内存不足&#xff0c;因…

python与材料计算公式_《从问题到程序:用Python学编程和计算》——2.11 补充材料-阿里云开发者社区...

本节书摘来自华章计算机《从问题到程序&#xff1a;用Python学编程和计算》一书中的第2章&#xff0c;第2.11节&#xff0c;作者 裘宗燕&#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看。2.11 补充材料本书各章的主要内容将围绕着怎样通过编程解决计算问题…

centos 6.9 NTP基准时间服务器配置

时间服务器端 yum install ntp -y vim /etc/ntp.conf 增加允许客户端访问 restrict 192.168.0.0 mask 255.255.0.0 nomodify 配置成自启动 chkconfig ntpd on service ntpd start 客户端配置 每天对时一次 crontab -e * 2 * * * ntpdate 192.168.139.130 转载于:https://www.cn…

hsdfz -- 6.16 -- day1

恩这回不写游记了 按照老师要求记录今天的心里路程&#xff1a;这题似乎可做期望得分150->日部分分似乎不是很显然->a题似乎是结论题&#xff0c;大力猜一波结论->过不了样例&#xff0c;先看b题->b题动态树&#xff0c;似乎可以肝lct->不会维护重链&#xff0c…

课时39.细线表格(理解)

请你设计出以下图片里的这个样式的表格 步骤&#xff1a; 我先来制作一个两行两列的表格 2.将table里的cellspacing设置成0 外边距是不见了&#xff0c;但是和我们想要完成的图片有一定的差距&#xff0c;我们发现这样做出来的图片好像是两条线合并到了一起一样&#xff0c;实…

强制Tomcat通过SLF4J / Logback登录

因此&#xff0c;您将JAR可执行Web应用程序与Tomcat捆绑在一起 &#xff08;请务必先阅读其中一个&#xff09;。 但是&#xff0c;开头有这些烦人的Tomcat日志&#xff0c;与我们的应用程序日志无关&#xff0c;并且不可自定义&#xff1a; Nov 24, 2012 11:44:02 PM org.apa…

matlab拼碎纸片过程,碎纸片拼接复原模型

1. 引言破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。企事业、机关、院校和军队基于保密的需要&#xff0c;使用碎纸机对重要文件&#xff0c;单据以及材料进行销毁。一些重要的文件随着时间流逝&#xff0c;残破不全&#xff0c;因此&…