open - pdf to image php
Guardar cada página PDF en una imagen usando Imagick (4)
Tengo la siguiente función php a continuación que convierte un archivo PDF local en imágenes. En resumen, quiero que cada página PDF se convierta en una imagen separada.
La función convierte el PDF a una imagen, pero solo la última página. Quiero que cada página del PDF se convierta en una imagen y numerada. No solo la última página del PDF.
Actualmente, esta función convierte la última página de example.pdf
en example-0.jpg
. Problema Estoy seguro de que se encuentra dentro del método de. ¿Qué me estoy perdiendo?
$file_name = ''example.pdf''; // using just for this example, I pull $file_name from another function
function _create_preview_images($file_name) {
// Strip document extension
$file_name = basename($file_name, ''.pdf'');
// Convert this document
// Each page to single image
$img = new imagick(''uploads/''.$file_name.''.pdf'');
// Set background color and flatten
// Prevents black background on objects with transparency
$img->setImageBackgroundColor(''white'');
$img = $img->flattenImages();
// Set image resolution
// Determine num of pages
$img->setResolution(300,300);
$num_pages = $img->getNumberImages();
// Compress Image Quality
$img->setImageCompressionQuality(100);
// Convert PDF pages to images
for($i = 0;$i < $num_pages; $i++) {
// Set iterator postion
$img->setIteratorIndex($i);
// Set image format
$img->setImageFormat(''jpeg'');
// Write Images to temp ''upload'' folder
$img->writeImage(''uploads/''.$file_name.''-''.$i.''.jpg'');
}
$img->destroy();
}
primera instalación
imagemagick
en su sistema o servidor y luego crear
pdfimage
carpeta y ponga el archivo pdf en esta carpeta, luego ejecute el código y cárguelo
<?php
$file_name = $_FILES[''pdfupload''][''name'']; // using just for this example, I pull $file_name from another function
//echo strpos($file_name,''.pdf'');
$basename = substr($file_name,0,strpos($file_name,''.''));
//echo $_FILES[''pdfupload''][''type''];
//if (isset($_POST[''submit''])){
if($_FILES[''pdfupload''][''type'']==''application/pdf''){
// Strip document extension
$file_name = basename($file_name, ''.pdf'');
// Convert this document
// Each page to single image
$img = new imagick(''pdfimage/''.$file_name.''.pdf'');
// Set background color and flatten
// Prevents black background on objects with transparency
$img->setImageBackgroundColor(''white'');
//$img = $img->flattenImages();
// Set image resolution
// Determine num of pages
$img->setResolution(300,300);
$num_pages = $img->getNumberImages();
// Compress Image Quality
$img->setImageCompressionQuality(100);
$images = NULL;
// Convert PDF pages to images
for($i = 0;$i < $num_pages; $i++) {
$images[]=$basename.''-''.$i.''.jpg'';
// Set iterator postion
$img->setIteratorIndex($i);
// Set image format
$img->setImageFormat(''jpeg'');
// Write Images to temp ''upload'' folder
$img->writeImage(''pdfimage/''.$file_name.''-''.$i.''.jpg'');
}
echo "<pre>";
print_r($images);
$img->destroy();
}
//}
?>
Parece que la mayor parte de mi código era correcto. El problema era que estaba usando $img->flattenImages();
incorrectamente. Esto merges
una secuencia de imágenes en una imagen. Es muy similar a cómo Photoshop aplana todas las capas visibles en una imagen al exportar un jpg
.
Eliminé la línea anterior y los archivos individuales se escribieron como se esperaba.
Hay una manera mucho más fácil sin el bucle, solo use $img->writeImages($filename,false);
y creará un archivo por página PDF. Como dijiste, si flatten
primero la imagen, solo ahorra 1 página.
/* convert pdf file to list image files */
if($_FILES[''file_any''][''type'']==''application/pdf''){
$file_name = str_replace(substr($url,0,strpos($url,$_FILES[''file_any''][''name''])),'''',$url);
$basename = substr($file_name,0,strpos($file_name,''.''));
$abcd = wp_upload_dir();
$delpath = $abcd[''path''];
$savepath = $abcd[''url''];
$dirpath = substr($savepath,(strpos($savepath,''/upl'')+1));
$file_name = basename($file_name, ''.pdf'');
$img = new imagick($delpath.''/''.$file_name.''.pdf'');
$img->setImageBackgroundColor(''white'');
$img->setResolution(300,300);
$num_pages = $img->getNumberImages();
$img->setImageCompressionQuality(100);
$imageurl = NULL;
$imagedelurl = NULL;
for($i = 0;$i < $num_pages; $i++) {
$imageurl[]=$savepath.''/''.$basename.''-''.$i.''.jpg'';
$imagedelurl[] = $delpath.''/''.$basename.''-''.$i.''.jpg'';
// Set iterator postion
$img->setIteratorIndex($i);
// Set image format
$img->setImageFormat(''jpeg'');
// Write Images to temp ''upload'' folder
$img->writeImage($delpath.''/''.$file_name.''-''.$i.''.jpg'');
}
$img->destroy();
}