source open imagen convertir convert code php codeigniter pdf imagemagick imagick

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(); }