PHP7.1+Imagick2.0 实现PSD文件转PNG图片
2018-01-05 本文已影响40人
sean92_
一、关于Imagick库
链接一枚 : imagick官网
ImageMagick是一套功能强大、稳定而且免费的工具集和开发包。与php官方GD库相比功能更加丰富,支持图片格式也更加多。
官网功能介绍
- 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®可以用来创建,编辑,合成或转换位图图像。 它可以读取和写入各种格式的图像(超过200个),包括PNG,JPEG,JPEG-2000,GIF,TIFF,DPX,EXR,WebP,Postscript,PDF和SVG。 可以使用ImageMagick来调整,翻转,镜像,旋转,扭曲,剪切和转换图像,调整图像颜色,应用各种特殊效果,或绘制文本,线条,多边形,椭圆和贝塞尔曲线。
二、业务需求介绍
- 惠学宝项目中我们的核心是围绕一个H5编辑器进行的,我们为用户提供各种丰富的H5宣传方案。通常由公司设计师设计出原始视觉方案(psd文件),再将各个图层切出图片(png)后上传到编辑器进行方案动画等效果设计,最终编辑器生成方案惠学宝手机端。此次需求即为省去手动转换的步骤,提高编辑效率。直接上传PSD文件,自动分析图层,转换为png图片,而后可以直接编辑图层图片。
三、服务器环境搭建(基于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的优化 这个不做介绍
四、代码实现(php7.1)
$image = new \Imagick(ROOT_PATH.'public/uploads/'.$fileName); //实例 化imagick 传入参数为文件路径
$num = $image->getNumberImages(); // 获取图层数
$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--;
}
五、效果演示
image.pngimage.png
欢迎交流指教!