[PHP+ImageMagick]将PDF转成图片(步骤详解)

PHP中要使用ImageMagick,需要安装imagick扩展,imagick与gd扩展类似,主要用于图像处理,但是imagick的功能更强大。下面简单介绍imagick在两种常用环境中的安装方法。

ImageMagick安装

ImageMagick是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布,它遵守GPL许可协议,可以运行于大多数的操作系统,ImageMagick的大多数功能的使用都来源于命令行工具。

PHP中要使用ImageMagick,需要安装imagick扩展,imagick与gd扩展类似,主要用于图像处理,但是imagick的功能更强大。下面简单介绍imagick在两种常用环境中的安装方法。

CentOS 7中安装

在CentOS中可以直接使用Yum进行安装,除了安装ImageMagick,还要安装它的两个依赖ImageMagick-devel和ImageMagick-perl。

yum install -y ImageMagick ImageMagick-devel ImageMagick-perl

接着使用pecl安装扩展。找到PHP安装目录下的pecl,例如PHP安装在/usr/local/php74目录中,则pecl一般在/usr/local/php74/bin目标中,执行命令:

/usr/local/php74/bin/pecl install imagick

即可使用pecl自动下载并安装ImageMagick,最后在php.ini中添加

extension=imagick.so

即可启用扩展。

如果你需要检查一下扩展有没有安装成功,可以执行一下命令

php -m|grep imagick

如果输出imagick,说明扩展安装成功。

题外话 :如果你不知道PHP使用的是哪个php.ini配置文件,可以执行一下以下命令

php74 -i|grep ini

找到”Loaded Configuration File”那行,就知道PHP使用的是哪个配置文件了。php -i命令作用类似于我们使用phpinfo()函数查看PHP的相关信息。

Docker安装

容器中的PHP安装扩展,推荐使用Github上的docker-php-extension-installer,这是一个Shell脚本,可以帮我们解决扩展的依赖问题,安装扩展后还会自动清除没用的文件。我们只需要在Dockerfile中加入这个脚本即可,下面是官方的示例:

FROM php:7.2-cli
# 从Github上下载docker-php-extension-installer脚本
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
# 添加可执行权限并安装扩展
RUN chmod +x /usr/local/bin/install-php-extensions && \\
install-php-extensions gd xdebug imagick

这样构建出来的镜像就安装好所需要的扩展了。

题外话:在国内网络环境下,使用docker-php-extension-installer安装扩展经常会出现超时问题,建议使用外网的VPS构建镜像,上传到DockerHub或者其它私有仓库后,再拉到本地网络使用。可使用便宜的良心云,或者Vultr这种支持按时计费的VPS。

PDF转图片代码示例:// 实例化imagick对象
$im = new imagick();
$im->setResolution(150, 150);
$im->setCompressionQuality(100);
$im->readImageBlob($fileContent);
$im->setImageFormat(;jpg;);
$im->setImageBackgroundColor(;white;);
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
$im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

header(;Content-type: image/jpeg;);
echo $im->getImageBlob();代码解读:$im->setResolution(150, 150);

用于设置图像的分辨率。这个函数并不改变图像的实际分辨率,只是在读取或创建图像之前将其设置在Imagick对象中,这个函数需要在读取图像或创建图像之前调用。这个函数接收两个参数,分别是横向分辨率和纵向分辨率,默认值是72*72。为了保持图像的宽高比,这两个参数值应该一样,默认值转换出来的图像不够清晰,建议使用两倍或三倍值,但同时图片的大小也会变大。

$im->setCompressionQuality(100);

设置图像的压缩质量,默认值为0;传入的参数值应为1-100,对于JPG格式图片,值越小,图像体积越小,同时清晰度也较低;但是对于PNG图片,这个结论貌似不成立,当值小于90时,图片体积反而越大,所以在转换为PNG图片格式时,保持默认值即可。

$im->readImageBlob($fileContent);

直接加载PDF文件的二进制内容,也可以使用readImage($filename)函数读取保存好的PDF文件。

$im->setImageFormat(;jpg;);

设置要生成的图像的格式,如jpg,png等,

$im->setImageBackgroundColor(;white;);
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
$im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

设置图像背景色为白色,去掉图像的alpha通道,将所有图像合并为一层,如果不执行这些操作,转换出来的图像背景会是黑色的,如下图:

[PHP+ImageMagick]将PDF转成图片(步骤详解)

php入门到就业线上直播课:进入学习API 文档、设计、调试、自动化测试一体化协作工具:点击使用

header(;Content-type: image/png;);
echo $im->getImageBlob();

获取转换生成图像的二进制数据,输出到客户端供下载;如果需要保存到文件,可以使用writeImage($filename)函数。

调用 ImageMagick 的PHP函数中文文档

原创2018-04-14 17:11:391282 + php学习QQ群(点击入群)这篇文章主要介绍了调用 ImageMagick 的PHP函数中文文档 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

导读:iMagick的作者并未告诉大家可以使用那些函数以及方法,这些函数和方法都是从source文件中的定义找到。作者摸索测试。请大家在有example的代码情况下做测试,不然很难用明白。

Function Description
图片构造类 image_handle = imagick_readimage([image file]) 读取图片到handle
bool = imagick_writeimage([source image handle],[new name & filetype]) 写图片
UN KNOW USE = imagick_writeimages
new_handle = imagick_clonehandle([image handle]) 复制出新句柄
image_handle = imagick_image2blob([blob handle]) 将数据流数据转换成为image数据
imagick_blob2image 与image2blob相反
image_handle = imagick_getcanvas([color],[canvas width],[canvas height]) 创建一个画布
UN KNOW USE = imagick_newimagelist
错误句柄类 bool = imagick_iserror([image handle]) 最后一次执行是否成功
rason_string = imagick_failedreason([image handle]) 如果执行iImagick函数返回假将可以从本函数抛出失败
desc_string = imagick_faileddescription([image handle]) 显示抛出的异常描述
error_string = imagick_error([image handle]) 返回错误内容
获取图片信息类 image_width = imagick_getwidth([image handle]) 获得图片宽度
image_height = imagick_getheight([image handle]) 获得图片高度
mime_string = imagick_getmimetype([image handle]) 获得图片MIME类型
depth_int = imagick_getimagedepth([image handle]) 获得图片DEPTH值
colors_num = imagick_getnumbercolors([image handle]) 获得图片颜色数量
bool = imagick_isgrayimage([image handle]) 是否会度图片
bool = imagick_ismonochromeimage([image handle]) 是否单色图片
bool = imagick_isopaqueimage([image handle]) 是否不透明图片
bool = imagick_ispaletteimage([image handle]) 是否彩色图片
image_type = imagick_getimagetype([image handle]) 获得图片颜色值
bool = imagick_isimagesequal([image handle1],([image handle2])) 图片是否相同
magick_type = imagick_getmagick([image handle]) 获得图片类型
int = imagick_getcolorspace([image handle])
图片转换类 bool = imagick_convert([image handle],[new type]) 将图片数据转换成为指定格式
bool = imagick_setcompressiontype([image handle],[compression type]) 指定图片的压缩方式
bool = imagick_setcompressionquality([image handle],[quality value]) 指定图片的压缩质量
尺寸调整类 bool = imagick_resize([image handle],[new width],[new height],[filter type],[blur],[geometry]) 改变图片尺寸
UN KNOW USE imagick_magnify
UN KNOW USE imagick_minify
bool = imagick_scale([image handle],[new width],[new height],[geometry]) 按照指定比例缩小图片
bool = imagick_sample([image handle],[new width],[new height],[geometry]) 缩小产生样本图片
bool = imagick_zoom([image handle],[new width],[new height],[geometry]) 放大图片
字体设置类 bool = imagick_setfontsize([image handle],[size]) 设置字体大小
UN KNOW USE imagick_setfontstyle
bool = imagick_setfontface([image handle],[Font Name]) 设置采用的字体
绘图类 bool = imagick_begindraw([image handle]) 开始在一个image上绘画
bool = imagick_drawannotation([image handle],[x],[y],[text]) 在image上的x y开始画一些文字符号
bool = imagick_drawrectangle([image handle],[up x],[up y],[low x],[low y]) 画一个矩形
bool = imagick_drawellipse([image handle],[starting x],[starting y],[ending x],[ending y],[start rotation in degrees],[end rotation in degrees]) 画一个椭圆形
bool = imagick_drawarc([image handle],[origin x],[origin y],[ x radius],[ y radius],[ start rotation in degrees],[ end rotation in degrees]) 画一个弧形
bool = imagick_drawcircle([image handle],[origin x],[origin y],[perimater x],[perimater y]) 画一个圆
bool = imagick_drawline([image handle],[starting x],[starting y],[ending x],[ending y]) 画一条线
bool = imagick_drawpoint([image handle],[x coordinate ],[ycoordinate ]) 画一个点
bool = imagick_setfillcolor([image handle],[color vlaue]) 设置填充颜色
bool = imagick_setfillopacity([image handle],[opactiy]) 设置不透明度
质量增强类 bool = imagick_rotate([image handle],[degrees]) 设置旋转图片的角度
bool = imagick_shear([image handle],[x coordinate],[y coordinate]) 旋转剪切
bool = imagick_contrast([image handle],[contrast value]) 提高或降低图象对比度
bool = imagick_equalize([image handle]) 色彩均匀化
bool = imagick_gamma([image handle],[gamma value 0.8 – 2.3]) 图象GAMMA调整
bool = imagick_level([image handle],[gamma value 0.8 – 2.3]) 图象GAMMA调整
bool = imagick_modulate([image handle],[modulate]) 调整亮度,饱和度,色彩
bool = imagick_negate([image handle],[gray scale value]) 反色图片
bool = imagick_normalize([image handle]) 规格化图片
图片装饰类 bool = imagick_border([image handle],[ x starting position of border ],[y starting position of border ],[width of border],[height of border]) 在图片上化一个边框
UN KNOW USE imagick_frame
bool = imagick_raise([image handle],[ x starting position of border ],[ y starting position of border ],[ width of border],[ height of border],[raise non-zero]) 浮雕效果
效率滤镜类 bool = imagick_charcoal([image handle],[the radius of pixel neighborhood],[the standard deviation of the Gaussian, in pixels]) 碳笔
bool = imagick_implode([image handle],[define the extent of the implosion]) 内曝效果
bool = imagick_oilpaint([image handle],[the radius of the circular neighborhood]) 油画效果
bool = imagick_solarize([image handle],[define the extent of solarization – this value is between 0 and MaxRGB]) 反转曝光
bool = imagick_swirl([image handle],[define the tightness of the swirling effect ]) 旋涡
bool = imagick_wave([image handle],[the amplitude of the wave],[the frequency of the wave]) 水波纹
图片滤镜类 bool = imagick_blur([image handle],[the radius of the Gaussian, in pixels, not counter the center pixel],[the standard deviation of the Gaussian, in pixels]) 模糊
bool = imagick_despeckle([image handle]) 平滑聚焦图象
bool = imagick_edge([image handle],[the radius of the pixel neighbor- hood; using 0 will cause a suitable radius to be selected for you]) 边缘锐化
bool = imagick_emboss([image handle],[the radius of the pixel neighbor- hood],[the standard deviation of the Gaussian, in pixels]) 浮雕效果
bool = imagick_enhance([image handle]) 图象增强
bool = imagick_gaussianblur([image handle],[he radius of the Gaussian, in pixels, not counting the center pixel; using 0 will cause a suitable radius to be selected for you],[the standard
deviation of the Gaussian, in pixels])
高斯模糊
bool = imagick_medianfilter([image handle],[the radius of the pixel neighbor-hood]) 平滑过滤图象
bool = imagick_motionblur([image handle],[the radius of the Gaussian, in pixels, not counter the center pixel],[the standard deviation of the Gaussian, in pixels],[apply the effect along this angle]) 动感模糊
bool = imagick_reducenoise([image handle],[the radius of the pixel neighborhood]) 降噪
bool = imagick_shade 阴影
bool = imagick_sharpen 锐化
bool = imagick_spread 发散
bool = imagick_threshold 临界值
bool = imagick_unsharpmask unsharpmask锐化
UN KNOW USE bool = imagick_flatten
图片列表类 bool = imagick_next
bool = imagick_prev
bool = imagick_first
bool = imagick_goto
bool = imagick_getlistsize
bool = imagick_getlistindex
bool = imagick_getimagefromlist
bool = imagick_pushlist
bool = imagick_poplist
图片变形类 bool = imagick_chop
bool = imagick_crop([image handle],[x starting position of border],[y starting position of border],[width of border],[height of border]) 从图片上截取
bool = imagick_flip ([image handle]) 图象翻转
bool = imagick_flop 左右转换
bool = imagick_roll
bool = imagick_profile
bool = imagick_rgbtransform 色彩变更
bool = imagick_transformrgb 色彩变更
bool = imagick_mosaic
bool = imagick_transparent([image handle],[color value]) 设置指定颜色成为透明色
图片量子化 bool = imagick_ordereddither([image handle])
图片合成类 bool = imagick_composite 图象融合
图片属性设置 bool = imagick_set_image_comment([image handle],[the comment to set in the image]) 设置图象的一些参数
bool = imagick_set_image_quality([image handle],[quality value]) 设置图象的质量
句柄销毁类 bool = imagick_destroyhandle([image handle]) 干掉指定的image handle
兼容的函数 imagick_read => imagick_readimage
imagick_free => imagick_destroyhandle
抛弃的函数 imagick_add_resource
imagick_list_magickinfo
imagick_new
imagick_init
imagick_copy_sample
imagick_copy_resize
imagick_copy_crop
imagick_copy_shear
imagick_copy_rotate
imagick_copy_morph
imagick_dump

相关推荐:

深入浅析ImageMagick命令执行漏洞

PHP的ImageMagick使用;

php入门到就业线上直播课:立即学习全程直播 + 实战授课 + 边学 + 边练 + 边辅导

以上就是调用 ImageMagick 的PHP函数中文文档的详细内容,更多请关注钦钦技术栈其它相关文章!

转载至:php中文网【www.php.cn】

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/25495/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022-09-24 11:49:13
下一篇 2022-09-24 11:49:33

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!