2013-03-06 9 views
5

Mi sto strappando i capelli.Converti PDF in JPG di alta qualità utilizzando PHP e ImageMagick

Ho un PDF da 300 DPI che voglio trasformare in un JPG da 300 DPI che è 2550x3300. Mi è stato detto che ImageMagick è in grado di fare tutto ciò, quindi faccio funzionare ImageMagick, ma restituisce solo un JPG di dimensioni pari a circa 1/5 della dimensione del PDF originale.

Non è l'immagine di origine: l'ho fatto con diversi PDF di alta qualità e tutti hanno lo stesso problema.

Dopo sgrassare StackOverflow per le idee, questo è ciò che mi è venuta da usare:

$im = new imagick($srcimg); 
$im->setImageResolution(2550,3300); 
$im->setImageFormat('jpeg'); 
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100); 
$im->writeImage($targetimg); 
$im->clear(); 
$im->destroy(); 

Ma ancora non funziona.

Ho anche provato a utilizzare $ img-> resizeImage() per ridimensionare il JPG, ma poi viene fuori con una qualità veramente scadente, se la giusta dimensione.

Totalmente perplesso. Apprezzo il tuo aiuto!

risposta

6

È necessario impostare la risoluzione prima di leggere l'immagine in. Si prega di see this comment on the manual - vedere se funzionerà.

+0

Se metto per primo setImageResolution, la classe non è stata ancora dichiarata. Se faccio $ im = new imagick(), quindi $ im-> setImageResolution, quindi $ im-> readImage ($ srcimg), ottengo questo errore: Errore irreversibile: eccezione non rilevata 'ImagickException' con messaggio 'Impossibile elaborare vuoto Imagick oggetto 'in ... –

+1

prova a usare '$ im-> setResolution()' sull'oggetto vuoto (vedi notazioni per 'Imagick :: setResolution' sul manuale) – dakdad

+0

Sì - l'ho fatto e l'ho fatto funzionare, anche se erano necessari solo 300.300. Il trucco stava cambiando l'ordine e usando setResolution invece di setImageResolution. Grazie! –

4

Questo sarebbe il modo corretto, la qualità migliorerà.

$im = new imagick(); 
$im->setResolution(300, 300); 
$im->readImage($srcimg); 
$im->setImageFormat('jpeg'); 
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100); 
$im->writeImage($targetimg); 
$im->clear(); 
$im->destroy();