2013-03-06 56 views
5

Tôi đang xé tóc ra.Chuyển đổi PDF sang JPG chất lượng cao bằng cách sử dụng PHP và ImageMagick

Tôi có PDF 300 DPI mà tôi muốn chuyển thành JPG DPI 300 là 2550x3300. Tôi đã nói ImageMagick có thể làm điều này, vì vậy tôi nhận được ImageMagick để làm việc, nhưng nó chỉ trả về một JPG có kích thước khoảng 1/5 kích thước PDF gốc.

Nó không phải là hình ảnh nguồn - Tôi đã thực hiện nó với một số tệp PDF chất lượng cao và tất cả đều có cùng một vấn đề.

Sau khi cọ rửa StackOverflow cho những ý tưởng, đây là những gì tôi đã đưa ra sử dụng:

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

Nhưng nó vẫn không hoạt động.

Tôi cũng đã thử sử dụng $ img-> resizeImage() để thay đổi kích thước JPG, nhưng sau đó nó xuất hiện ở chất lượng thực sự kém, nếu đúng kích cỡ.

Hoàn toàn bối rối. Đánh giá cao sự giúp đỡ của bạn!

Trả lời

6

Bạn cần đặt độ phân giải trước khi đọc hình ảnh. Vui lòng see this comment on the manual - xem điều đó có hiệu quả hay không.

+0

Nếu tôi đặt setImageResolution trước, lớp chưa được khai báo. Nếu tôi làm $ im = new imagick(), sau đó $ im-> setImageResolution, sau đó $ im-> readImage ($ srcimg), tôi nhận được lỗi này: Lỗi nghiêm trọng: Uncaught exception 'ImagickException' với thông điệp 'Không thể xử lý rỗng Imagick đối tượng 'in ... –

+1

thử sử dụng '$ im-> setResolution()' trên đối tượng trống (xem chú thích cho 'Imagick :: setResolution' trên hướng dẫn sử dụng) – dakdad

+0

Có - chỉ cần làm điều này và tôi đã làm việc đó, mặc dù chỉ cần 300.300. Bí quyết đã chuyển đổi thứ tự và sử dụng setResolution thay vì setImageResolution. Cảm ơn! –

4

Đây sẽ là cách chính xác, chất lượng sẽ cải thiện.

$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(); 
Các vấn đề liên quan