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.pswp.cn/news/370322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370322.shtml
英文地址,請注明出處:http://en.pswp.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;因此&…