2013-03-06 16 views
5

Wyciągam włosy z głowy.Konwersja plików PDF na JPG w wysokiej jakości za pomocą PHP i ImageMagick

Mam plik PDF o rozdzielczości 300 DPI, który chcę przekształcić w JPG o rozdzielczości 300 DPI, czyli 2550 x 3300. Mówi mi się, że ImageMagick może to zrobić, więc dostaję ImageMagick do pracy, ale zwraca tylko JPG o rozmiarze około 1/5 oryginalnego rozmiaru PDF.

To nie jest obraz źródłowy - zrobiłem to z kilkoma wysokiej jakości plikami PDF i wszystkie mają ten sam problem.

Po szorowania StackOverflow pomysłów, to co wymyśliłem używać:

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

Ale to nadal nie działa.

Próbowałem również użyć $ img-> resizeImage(), aby zmienić rozmiar JPG, ale potem wychodzi na naprawdę złej jakości, jeśli ma odpowiedni rozmiar.

Totally stumped. Doceniam Twoją pomoc!

Odpowiedz

6

Musisz ustawić rozdzielczość przed odczytaniem obrazu. Proszę see this comment on the manual - zobacz, czy to zadziała.

+0

Jeśli kładę setImageResolution pierwsza klasa nie został jeszcze ogłoszony. Jeśli wykonam $ im = new imagick(), następnie $ im-> setImageResolution, a następnie $ im-> readImage ($ srcimg), otrzymuję następujący błąd: Błąd krytyczny: Niepostrzeżenie wyjątek "ImagickException" z komunikatem "Nie można przetworzyć pustego Imagick'a" object 'in ... –

+1

spróbuj użyć '$ im-> setResolution()' na pustym obiekcie (patrz noty dla 'Imagick :: setResolution' na instrukcji) – dakdad

+0

Tak - właśnie to zrobiłem i mam to do pracy, chociaż potrzebne było tylko 300 300. Sztuczka polegała na zmianie kolejności i użyciu setResolution zamiast setImageResolution. Dzięki! –

4

To byłby właściwy sposób, jakość ulegnie poprawie.

$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(); 
Powiązane problemy