>  기사  >  백엔드 개발  >  [PHP+ImageMagick] PDF를 이미지로 변환(자세한 단계)

[PHP+ImageMagick] PDF를 이미지로 변환(자세한 단계)

藏色散人
藏色散人앞으로
2022-01-19 16:44:505860검색

ImageMagick은 무료 제작, 편집 및 합성 사진 소프트웨어입니다. 다양한 형식의 이미지를 읽고, 변환하고, 쓸 수 있습니다. 그림 자르기, 색상 교체, 다양한 효과 적용, 그림 회전, 조합, 텍스트, 직선, 다각형, 타원, 곡선, 그림에 첨부된 확장 및 회전. ImageMagick은 무료 소프트웨어입니다. 모든 소스 코드는 공개되어 있으며 자유롭게 사용, 복사, 수정 및 배포할 수 있습니다. 이는 GPL 라이센스 계약을 준수하며 대부분의 운영 체제에서 실행될 수 있습니다.

PHP에서 ImageMagick을 사용하려면 imagick 확장을 설치해야 합니다. imagickgd 확장과 유사하며 주로 사용됩니다. 이미지 처리 기능이 있지만 imagick이 더 강력합니다. 다음은 두 가지 공통 환경에서 imagick을 설치하는 방법을 간략하게 소개합니다.

CentOS 7에서 설치

CentOS에서는 Yum을 사용하여 ImageMagick을 설치하는 것 외에도 다음 작업이 필요합니다. ImageMagick-develImageMagick-perl에 따라 두 개를 설치합니다. imagick扩展,imagickgd扩展类似,主要用于图像处理,但是imagick的功能更强大。下面简单介绍imagick在两种常用环境中的安装方法。

CentOS 7中安装

在CentOS中可以直接使用Yum进行安装,除了安装ImageMagick,还要安装它的两个依赖ImageMagick-develImageMagick-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);
그런 다음 pecl을 사용하여 확장 프로그램을 설치하세요. PHP 설치 디렉토리에서 pecl을 찾으세요. 예를 들어, PHP는 /usr/local/php74 디렉토리에 설치되어 있으며, 일반적으로 pecl은 다음 위치에 있습니다. / usr/local/php74/bin 대상에서
header("Content-type: image/png");
echo $im->getImageBlob();

명령을 실행하여 pecl을 사용하여 ImageMagick을 자동으로 다운로드하고 설치합니다. 마지막으로 php에서

rrreee

를 .ini에 추가하여 확장 기능을 활성화합니다. [PHP+ImageMagick] PDF를 이미지로 변환(자세한 단계)

확장 기능이 성공적으로 설치되었는지 확인하려면 🎜rrreee🎜 명령을 실행하면 됩니다. imagick이 출력되면 확장 기능이 성공적으로 설치된 것입니다. 🎜🎜🎜여담: PHP가 어떤 php.ini 구성 파일을 사용하는지 모르는 경우 다음 명령🎜rrreee🎜을 실행하여 "로드된 구성 파일"을 찾을 수 있습니다. " 좋습니다. PHP가 어떤 구성 파일을 사용하고 있는지 알 수 있습니다. php -i 명령
phpinfo() 함수를 사용하여 PHP 관련 정보를 보는 방법과 유사합니다. 🎜🎜

🎜🎜Docker 설치

🎜 컨테이너에 PHP용 확장 기능을 설치하려면 Github에서 docker-php-extension-installer를 사용하는 것이 좋습니다. 확장 기능 해결에 도움이 될 수 있는 Shell 스크립트입니다. 종속성 문제를 해결하고 설치하세요. 사용하지 않는 파일도 확장 후 자동으로 지워집니다. 이 스크립트를 Dockerfile에 추가하기만 하면 됩니다. 다음은 공식 예입니다. 🎜rrreee🎜 이런 방식으로 빌드된 이미지에는 필요한 확장이 설치됩니다. 🎜🎜🎜여담: 국내 네트워크 환경에서 docker-php-extension-installer를 사용하여 확장 프로그램을 설치하면 시간 초과 문제가 발생하는 경우가 많기 때문에 외부 VPS를 사용하는 것이 좋습니다. 이미지를 빌드하고 DockerHub 또는 기타 개인 창고에 업로드한 다음 사용하기 위해 로컬 네트워크로 끌어옵니다. 저렴한 양심 클라우드나 시간 기반 청구를 지원하는 Vultr와 같은 VPS를 사용할 수 있습니다. 🎜🎜🎜🎜🎜PDF를 이미지로🎜

🎜🎜코드 예:

rrreee

코드 해석:

rrreee🎜는 이미지의 해상도를 설정하는 데 사용됩니다. 이 함수는 이미지의 실제 해상도를 변경하지 않으며, 이미지를 읽거나 생성하기 전에 Imagick 객체에 이를 설정하기만 하면 됩니다.
이 함수는 수평 해상도와 수직 해상도라는 두 가지 매개변수를 받습니다. 기본값은 72*72입니다. 이미지의 가로세로 비율을 유지하려면 이 두 매개변수의 값이 동일해야 합니다. 기본값으로 변환된 이미지는 2배 또는 3배의 값을 사용하는 것이 좋지만 크기가 커집니다. 이미지의 크기도 커집니다. 🎜🎜rrreee🎜이미지의 압축 품질을 설정합니다. 기본값은 0입니다. 전달되는 매개변수 값은 1-100이어야 합니다. JPG 형식 이미지의 경우 값이 작을수록 이미지 크기가 작아지고 선명도가 낮아집니다. 하지만 PNG 그림의 경우에는 이 결론이 사실이 아닌 것 같습니다. 값이 90보다 작으면 그림 크기가 커지므로 PNG 그림 형식으로 변환할 때는 기본값을 유지하면 됩니다. 🎜🎜rrreee🎜 PDF 파일의 바이너리 내용을 직접 로드하거나 readImage($filename) 함수를 사용하여 저장된 PDF 파일을 읽을 수 있습니다. 🎜🎜rrreee🎜생성할 이미지의 형식을 jpg, png 등으로 설정합니다. 🎜🎜rrreee🎜이미지의 배경색을 흰색으로 설정합니다. , 이미지의 알파 채널을 제거하면 모든 이미지가 하나의 레이어로 병합됩니다. 이러한 작업을 수행하지 않으면 변환된 이미지의 배경은 아래와 같이 검정색이 됩니다. 🎜🎜🎜🎜
header("Content-type: image/png");
echo $im->getImageBlob();

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

推荐:《PHP视频教程

위 내용은 [PHP+ImageMagick] PDF를 이미지로 변환(자세한 단계)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제