一、關于Imagick庫
鏈接一枚 : imagick官網(wǎng)
ImageMagick是一套功能強大矛紫、穩(wěn)定而且免費的工具集和開發(fā)包乌庶。與php官方GD庫相比功能更加豐富屉栓,支持圖片格式也更加多妖泄。
官網(wǎng)功能介紹
- Use ImageMagick? to create, edit, compose, or convert bitmap images. It can read and write images in a variety of (over 200) including PNG, JPEG, JPEG-2000, GIF, TIFF, WebP, Postscript, PDF, and SVG. Use ImageMagick to resize, flip, mirror, rotate, distort, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.
(附中文)
- 使用ImageMagick?可以用來創(chuàng)建平挑,編輯骗灶,合成或轉換位圖圖像惨恭。 它可以讀取和寫入各種格式的圖像(超過200個),包括PNG耙旦,JPEG脱羡,JPEG-2000,GIF免都,TIFF锉罐,DPX,EXR绕娘,WebP脓规,Postscript,PDF和SVG险领。 可以使用ImageMagick來調(diào)整侨舆,翻轉秒紧,鏡像,旋轉挨下,扭曲熔恢,剪切和轉換圖像,調(diào)整圖像顏色复颈,應用各種特殊效果绩聘,或繪制文本,線條耗啦,多邊形凿菩,橢圓和貝塞爾曲線。
二帜讲、業(yè)務需求介紹
- 惠學寶項目中我們的核心是圍繞一個H5編輯器進行的衅谷,我們?yōu)橛脩籼峁└鞣N豐富的H5宣傳方案。通常由公司設計師設計出原始視覺方案(psd文件)似将,再將各個圖層切出圖片(png)后上傳到編輯器進行方案動畫等效果設計,最終編輯器生成方案惠學寶手機端获黔。此次需求即為省去手動轉換的步驟,提高編輯效率在验。直接上傳PSD文件玷氏,自動分析圖層,轉換為png圖片腋舌,而后可以直接編輯圖層圖片盏触。
三、服務器環(huán)境搭建(基于ubuntu16.4)
- 安裝imagick 庫
sudo apt-get install imagemagick
- 安裝php imagick 擴展
sudo apt install php-imagick
- 修改php.ini
添加extension=imagick.so
- 重啟php7.1-fpm
service php7.1-fpm restart
- 最后查看phpinfo中擴展是否安裝块饺,當然對于php fpm的優(yōu)化 這個不做介紹
四赞辩、代碼實現(xiàn)(php7.1)
$image = new \Imagick(ROOT_PATH.'public/uploads/'.$fileName); //實例 化imagick 傳入?yún)?shù)為文件路徑
$num = $image->getNumberImages(); // 獲取圖層數(shù)
$index = $image->getNumberImages()+1;
$code = '';
for($i=1;$i<6;$i++){
$code.=rand(0,9);
}
//批量壓縮及保存圖層為png文件
for ($i = 1; $i < $num; ++$i) {
$image->setIteratorIndex($i); //選擇圖層
$pagedata = $image->getImagePage();
$w = $image->getImageWidth()/4; //圖片寬
$h = $image->getImageHeight()/4; //圖片高
$image->setImageFormat('png'); //圖片格式
$name = $i.time().$code. '.png';
//壓縮圖片
$image->setImageCompression(\Imagick::COMPRESSION_UNDEFINED); //圖片壓縮
$quality = $image->getImageCompressionQuality() * 0.60; //壓縮質量 0.6
if ($quality == 0) {
$quality = 60;
}
$image->setImageCompressionQuality($quality);
$image->stripImage();
$image->writeImage(ROOT_PATH.'public/uploads/'.$name); //導出所有圖層到單獨的png文件
$pagedata['z-index'] = $index;
$pagedata['index'] = $index;
$pagedata['url'] = $url.$name;
$allinfo[] =$pagedata;
$index--;
}
五、效果演示
歡迎交流指教授艰!