php8 实现图片和pdf文件相互转换
php8 结合 imagick 3.7
实现图片和pdf文件相互转换
多个图片合并成为一个图片
function margeImages($images, $outputPath)
将一个PDF文件转换为一张长图 或者多个图片
function pdf2img($pdfPath, $outputPath, $imageType = 'jpg', $toMulti = false)
多个图片合并生成一个pdf文件
function img2pdf($imagePaths, $outputPath)
多个pdf文件合并成一个pdf文件
function mult_pdf2pdf($pdfFiles, $outputPath)
完整代码
<?php
// 引入 Imagick 扩展
if (!extension_loaded('imagick')) {
die('Imagick扩展未加载');
}
// 文档 https://www.php.net/imagick
//文档 https://phpimagick.com/Imagick/appendImages
use Imagick;
$pdfPath = '/data/zxf/test.pdf'; // 要转换的PDF文件路径(替换为你的实际文件路径)
$outputPath = '/data/zxf/temp/output.jpg'; // 转换后的JPG文件输出路径(替换为你的实际文件路径)
$images = [
"/data/zxf/temp/test_0.png",
"/data/zxf/temp/test_1.png",
];
// 合并图片,多个图片合并成一张图片
function margeImages($images, $outputPath)
{
$canvas = new Imagick();
foreach ($images as $imageRow) {
$rowImagick = new Imagick(realpath($imageRow));
$rowImagick->setImageBackgroundColor("gray");
// 设置图像大小
$rowImagick->resizeimage(500, 500, \Imagick::FILTER_LANCZOS, 1.0, true);
$canvas->addImage($rowImagick);
}
$canvas->resetIterator();
// true:纵向合并图片;false 横向合并图片
$finalimage = $canvas->appendImages(true);
$finalimage->setImageFormat('jpg');
// 将最终图像保存为JPG文件
$finalimage->writeImage($outputPath);
// 浏览器输出图片
// header("Content-Type: image/jpeg");
// echo $finalimage->getImageBlob();
// 清理资源,释放资源
$canvas->destroy();
$finalimage->destroy();
}
margeImages($images, $outputPath = '/data/zxf/temp/multiple_img_to_one_img.jpg');
// 将PDF转换为一张长图 或者多个图片
function pdf2img($pdfPath, $outputPath, $imageType = 'jpg', $toMulti = false)
{
$pdf = new Imagick($pdfPath);
$pageCount = $pdf->getNumberImages();
$pdf->setImageFormat($imageType);
if ($toMulti) {
for ($i = 0; $i < $pageCount; $i++) {
$pdf->setIteratorIndex($i);
$pdf->writeImage($outputPath . '_' . $i . '.' . $imageType);
}
} else {
$pdf->resetIterator();
// true:纵向合并图片;false 横向合并图片
$finalimage = $pdf->appendImages(true);
$finalimage->setImageFormat('jpg');
// 将最终图像保存为JPG文件
$finalimage->writeImage($outputPath);
// 浏览器输出图片
// header("Content-Type: image/jpeg");
// echo $finalimage->getImageBlob();
$finalimage->destroy();
}
// 清理资源,释放资源
$pdf->destroy();
}
pdf2img($pdfPath, $outputPath = '/data/zxf/temp/pdf_to_one_img.jpg', 'jpg', false);
function img2pdf($imagePaths, $outputPath)
{
// 创建一个新的 Imagick 对象
$pdf = new Imagick();
foreach ($imagePaths as $path) {
$image = new Imagick($path);
$pdf->addImage($image);
}
// 将所有图片合并为一个 PDF 文件
$pdf->setImageFormat('pdf');
// $pdf->saveImage($outputPath); // 保存为 PDF 文件
// 保存合并后的 PDF 文件
$pdf->writeImages($outputPath, true);
// 清理资源
$pdf->clear();
$pdf->destroy();
}
img2pdf($images, $outputPath = '/data/zxf/temp/mult_img_to_pdf.pdf');
function mult_pdf2pdf($pdfFiles, $outputPath)
{
// 多个PDF文件合并为一个PDF文件(放在一页内)
// // 创建Imagick对象
// $image = new Imagick();
//
// // 逐个添加PDF文件到Imagick对象
// foreach ($pdfFiles as $file) {
// $image->readImage($file);
// }
//
// // 设置合并的PDF文件设置
// $image->resetIterator();
// $combinedPdf = $image->appendImages(true);
//
// // 将合并后的PDF保存到新文件中
// $combinedPdf->setImageFormat('pdf');
// $combinedPdf->writeImages($outputPath, true);
//
// // 清理Imagick对象
// $image->clear();
// $image->destroy();
// 多个PDF文件合并为一个PDF文件(放在一页内) end
// 创建ImageMagick对象
$imagick = new Imagick();
// 合并PDF文件
foreach ($pdfFiles as $pdfFile) {
$imagick->readImage($pdfFile);
}
// 设置PDF输出选项
$imagick->setImageFormat('pdf');
// 合并PDF文件并保存
$imagick->writeImages($outputPath, true);
// 清理资源
$imagick->clear();
$imagick->destroy();
}
mult_pdf2pdf(['/data/zxf/test.pdf', '/data/zxf/t1.pdf'], $outputPath = '/data/zxf/temp/mult_pdf_to_one_pdf.pdf');
echo '完成!';