[PHP+ImageMagick] Convertir un PDF en image (étapes détaillées)

藏色散人
Libérer: 2023-04-10 21:20:01
avant
5882 Les gens l'ont consulté

ImageMagick est un logiciel gratuit de création, d'édition et d'images de synthèse. Il peut lire, convertir et écrire des images dans plusieurs formats. Découpe d'images, remplacement de couleurs, application de divers effets, rotation d'images, combinaison, texte, lignes droites, polygones, ellipses, courbes, extension et rotation attachées aux images. ImageMagick est un logiciel gratuit : tout le code source est ouvert et peut être utilisé, copié, modifié et distribué librement. Il est conforme au contrat de licence GPL et peut s'exécuter sur la plupart des systèmes d'exploitation. La plupart des fonctions d'ImageMagick proviennent d'outils de ligne de commande.

Pour utiliser ImageMagick en PHP, vous devez installer l'extension imagick. imagick est similaire à l'extension gd et est principalement utilisée pour. traitement d'image, mais imagick est plus puissant. Ce qui suit est une brève introduction aux méthodes d'installation de imagick dans deux environnements courants.

Installation dans CentOS 7

Dans CentOS, vous pouvez utiliser Yum pour installer directement En plus d'installer ImageMagick, vous devez également. en installer deux Dépend de ImageMagick-devel et ImageMagick-perl. imagick扩展,imagickgd扩展类似,主要用于图像处理,但是imagick的功能更强大。下面简单介绍imagick在两种常用环境中的安装方法。

CentOS 7中安装

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

yum install -y ImageMagick ImageMagick-devel ImageMagick-perl
Copier après la connexion

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

/usr/local/php74/bin/pecl install imagick
Copier après la connexion

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

extension=imagick.so
Copier après la connexion

即可启用扩展。

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

php -m|grep imagick
Copier après la connexion

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


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

php74 -i|grep ini
Copier après la connexion

找到”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
Copier après la connexion

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


题外话:在国内网络环境下,使用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();
Copier après la connexion

代码解读:

$im->setResolution(150, 150);
Copier après la connexion

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


$im->setCompressionQuality(100);
Copier après la connexion

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


$im->readImageBlob($fileContent);
Copier après la connexion

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


$im->setImageFormat('jpg');
Copier après la connexion

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

$im->setImageBackgroundColor('white');
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
$im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
Copier après la connexion

Ensuite, utilisez pecl pour installer l'extension. Recherchez pecl dans le répertoire d'installation de PHP. Par exemple, PHP est installé dans le répertoire /usr/local/php74, puis pecl se trouve généralement dans le répertoire pecl. / Dans la cible usr/local/php74/bin, exécutez la commande :
header("Content-type: image/png");
echo $im->getImageBlob();
Copier après la connexion
Copier après la connexion

pour utiliser pecl pour télécharger et installer automatiquement ImageMagick, et enfin dans php Ajoutez </p>rrreee<p> au .ini pour activer l'extension. [PHP+ImageMagick] Convertir un PDF en image (étapes détaillées)

Si vous devez vérifier si l'extension est installée avec succès, vous pouvez exécuter la commande 🎜rrreee🎜Si imagick est affiché, cela signifie que l'extension est installée avec succès. 🎜🎜🎜Digression : Si vous ne savez pas quel fichier de configuration php.ini PHP utilise, vous pouvez exécuter la commande suivante🎜rrreee🎜 pour trouver le "Fichier de configuration chargé " OK, vous saurez quel fichier de configuration PHP utilise. La commande php -i
est similaire à la façon dont nous utilisons la fonction phpinfo() pour afficher les informations relatives à PHP. 🎜🎜

🎜🎜Installation de Docker

🎜Pour installer des extensions pour PHP dans le conteneur, il est recommandé d'utiliser docker-php-extension-installer sur Github. Il s'agit d'un script Shell qui peut nous aider à résoudre l'extension. problème de dépendance et installez-le. Les fichiers inutilisés seront également automatiquement effacés après l'expansion. Il nous suffit d'ajouter ce script au Dockerfile. Voici l'exemple officiel : 🎜rrreee🎜L'image construite de cette manière aura les extensions requises installées. 🎜🎜🎜Digression : Dans l'environnement réseau domestique, l'utilisation de docker-php-extension-installer pour installer des extensions entraîne souvent des problèmes de délai d'attente. Il est recommandé d'utiliser un VPS externe pour. créez l'image, téléchargez-la sur DockerHub ou d'autres entrepôts privés, puis transférez-la sur le réseau local pour l'utiliser. Vous pouvez utiliser un cloud de conscience bon marché ou un VPS comme Vultr qui prend en charge la facturation basée sur le temps. 🎜🎜🎜🎜🎜PDF vers image🎜

🎜🎜Exemple de code :

rrreee

Interprétation du code :

rrreee🎜 est utilisé pour définir la résolution de l'image. Cette fonction ne modifie pas la résolution réelle de l'image, elle la définit simplement dans l'objet Imagick avant de lire ou de créer l'image. Cette fonction doit être appelée avant de lire l'image ou de créer l'image.
Cette fonction reçoit deux paramètres, à savoir la résolution horizontale et la résolution verticale. La valeur par défaut est 72*72. Afin de conserver le rapport hauteur/largeur de l'image, les valeurs de ces deux paramètres doivent être les mêmes. L'image convertie par la valeur par défaut n'est pas assez claire. Il est recommandé d'utiliser le double ou le triple de la valeur, mais la taille. de l’image deviendra également plus grande. 🎜🎜rrreee🎜Définissez la qualité de compression de l'image, la valeur par défaut est 0 ; la valeur du paramètre transmise doit être comprise entre 1 et 100. Pour les images au format JPG, plus la valeur est petite, plus la taille de l'image est petite et plus la clarté est faible ; mais pour l'image PNG, cette conclusion ne semble pas être vraie. Lorsque la valeur est inférieure à 90, la taille de l'image sera plus grande, donc lors de la conversion au format d'image PNG, conservez simplement la valeur par défaut. 🎜🎜rrreee🎜 Chargez directement le contenu binaire du fichier PDF, ou vous pouvez utiliser la fonction readImage($filename) pour lire le fichier PDF enregistré. 🎜🎜rrreee🎜Définissez le format de l'image à générer, tel que jpg, png, etc., 🎜🎜rrreee🎜Définissez la couleur d'arrière-plan de l'image sur blanc , supprimez le canal alpha de l'image et toutes les images sont fusionnées en un seul calque. Si vous n'effectuez pas ces opérations, l'arrière-plan de l'image convertie sera noir, comme indiqué ci-dessous : 🎜🎜🎜🎜.
header("Content-type: image/png");
echo $im->getImageBlob();
Copier après la connexion
Copier après la connexion

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

推荐:《PHP视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal