Php 将多页pdf转换为多幅图像
我正在尝试使用PHP Image magic extension将一个多页PDF文件转换为图像。问题是,我没有得到与文件的每一页对应的图像,而是得到PDF的最后一页作为输出图像。代码如下:Php 将多页pdf转换为多幅图像,php,imagemagick,Php,Imagemagick,我正在尝试使用PHP Image magic extension将一个多页PDF文件转换为图像。问题是,我没有得到与文件的每一页对应的图像,而是得到PDF的最后一页作为输出图像。代码如下: $handle = fopen($imagePath, "w"); $img1 = new Imagick(); $img1->setResolution(300,300); $img1->readImage(path to pdf file); $img1->setColorspace(
$handle = fopen($imagePath, "w");
$img1 = new Imagick();
$img1->setResolution(300,300);
$img1->readImage(path to pdf file);
$img1->setColorspace(imagick::IMGTYPE_GRAYSCALE);
$img1->setCompression(Imagick::COMPRESSION_JPEG);
$img1->setCompressionQuality(80);
$img1->setImageFormat("jpg");
$img1->writeImageFile($handle);
我做错了什么?命令行上具有相同参数的convert命令可以工作。请尝试以下操作:
$images = new Imagick("test.pdf");
foreach($images as $i=>$image) {
$image->setResolution(300,300);
//etc
$image->writeImage("page".$i.".jpg");
}
尝试writeImages函数。它将每个页面创建为一个图像,并为多个图像提供文件名,如:yourimagename、yourimagename-1、yourimagename-2。。。。它会自动从0增加到您的页码PDF-1 代码如下所示:
$imagick = new Imagick($file_handle);
$imagick->readImage();
$imagick->writeImages($yourImagename.'.jpg', false);
$images = new Imagick();
$im->readImage($PdfFile);
$pages = (int)$im->getNumberImages();
如果您知道pdf的页数,请尝试以下方法:
$images = new Imagick();
foreach ($pages as $p){
$im->readImage($PdfFile."[".$p."]"); //yourfile.pdf[0], yourfile.pdf[1], ...
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(82);
$im->setImageFormat( "jpg" );
//...
$image_out = "image_".$p.".jpg";
$im->writeImage($image_out);
}
$im->clear();
$im->destroy();
如果您不知道页数,可以这样做:
$imagick = new Imagick($file_handle);
$imagick->readImage();
$imagick->writeImages($yourImagename.'.jpg', false);
$images = new Imagick();
$im->readImage($PdfFile);
$pages = (int)$im->getNumberImages();
这对我有用
$file = "./path/to/file/name.pdf";
$fileOpened = @fopen($archivo, 'rb');
$images = new Imagick();
$images->readImageFile($fileOpened);
foreach ($images as $i => $image) {
$image->setResolution(300, 300);
$image->setImageFormat("jpg");
$image->setImageCompression(imagick::COMPRESSION_JPEG);
$image->setImageCompressionQuality(90);
$image->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
$data_blob = $image->getImageBlob();
$ouput="./path/images/files/page" . $i . ".jpg";
file_put_contents($ouput, $data_blob);
}
@fclose($fileOpened);
我希望我也能帮助您这将适用于具有多个页面以及单个页面的pdf
$pdf_file = 'path/to/pdf/file.php';
$image = new imagick();
$image->setResolution(300,300);
$image->readImage($pdf);
$image->setImageFormat('jpg');
// Set all other properties
$pages = $image->getNumberImages();
if ($pages) {
foreach($image as $index => $pdf_image) {
$pdf_image->writeImage('destination/path/' . $index . '-image_file.jpg');
}
} else {
echo 'PDF doesn\'t have any pages';
}
试着这样做:$images=newimagick(“test.pdf”);foreach($i=>$image){$image->writeImage(“page”。$i.“.jpg”);}@Martin Wilson:您应该将您的评论升级为正确的答案……这对我不起作用,我遇到了“无法处理空的Imagick对象”异常。这种循环工作正常,但对于超过100页的文档可能需要很长时间,并会阻塞服务器