2012-02-10 11 views
24

के साथ पीडीएफ को जेपीईजी में कनवर्ट करें मैं पीडीएफ को जेपीजी में परिवर्तित करने के लिए एक लिट स्क्रिप्ट का उपयोग कर रहा हूं। यह काम करता है लेकिन गुणवत्ता बहुत खराब है।PHP और ImageMagick

स्क्रिप्ट:

$im = new imagick('document.pdf[ 0]'); 
$im->setImageColorspace(255); 
$im->setResolution(300, 300); 
$im->setCompressionQuality(95); 
$im->setImageFormat('jpeg'); 
$im->writeImage('thumb.jpg'); 
$im->clear(); 
$im->destroy(); 

एक और बात, मैं पीडीएफ के मूल आकार रखना चाहते हैं लेकिन रूपांतरण जेपीजी का आकार फसलों।

उत्तर

37

यह setResolution का उपयोग करके किया जा सकता है, लेकिन आपको छवि लोड करने से पहले इसे करने की आवश्यकता है। अधिक जानकारी के लिए

// instantiate Imagick 
$im = new Imagick(); 

$im->setResolution(300,300); 
$im->readimage('document.pdf[0]'); 
$im->setImageFormat('jpeg');  
$im->writeImage('thumb.jpg'); 
$im->clear(); 
$im->destroy(); 
+3

ऐसा लगता है कि कुछ मामलों में ImageMagick को घोस्टस्क्रिप्ट को स्थापित करने की आवश्यकता होती है, क्योंकि अन्यथा यह एक पोस्टस्क्रिप्ट प्रतिनिधि को विफल कर देगा त्रुटि – Zsolti

+0

क्यों दुनिया में सेट करें पुनरुत्थान और सेट इमेज रेसोल्यूशन अलग-अलग चीजें करता है और दस्तावेज़ों में वही विवरण है ?! धन्यवाद, तुमने मुझे पूरी तरह से बचाया। – Hissvard

1

सुनिश्चित करें कि पीडीएफ सही रंग प्रोफाइल के साथ बनाया गया है, मुझे एक बार गलत फ़ाइल प्रोफ़ाइल के साथ स्रोत फ़ाइल के कारण आकार बदलने के बाद मेरा जेपीजी बहुत धोया गया था। यह भी देखें: ImageMagick PDF to JPEG conversion results in green square where image should be

+0

समस्या नहीं है यही कारण है कि। –

+0

यह एक टिप्पणी होना चाहिए, एक बहुत ही रोचक टिप्पणी, जवाब नहीं। – Machado

5

छवि पीडीएफ से उत्पादन की गुणवत्ता पीडीएफ में पढ़ने से पहले density (जो डीपीआई है) की स्थापना करके बदला जा सकता है - यह जो नीचे पीडीएफ rasterizes ghostscript (gs) को अतीत हो जाता है। एक अच्छा नतीजा पाने के लिए, वांछित डीपीआई पर वापस जाने के लिए डबल डेंसिटी पर सुपरसंपल करें, और resample का उपयोग करें। यदि आप आरजीबी जेपीईजी चाहते हैं तो colorspace आरजीबी में बदलना याद रखें।

convert के लिए एक विशिष्ट कमांड लाइन संस्करण हो सकता है:

convert -density 600 document.pdf[0] -colorspace RGB -resample 300 output.jpg 

आप काट-छांट करने की जरूरत है, एक -shave आदेश प्रतिदर्श चैनल के बाद, आम तौर पर समझदार है अगर छवि पृष्ठ के भीतर केंद्रित है।

PHP IMagick extension के लिए, ठीक है, मैंने व्यक्तिगत रूप से इसका उपयोग कभी नहीं किया - इसलिए मुझे यह सुनिश्चित नहीं है कि आप फ़ाइल पढ़ने के संकेत कैसे निर्दिष्ट करते हैं, लेकिन मुझे उम्मीद है कि यह संभव है।

3
$im = new imagick(); 

//this must be called before reading the image, otherwise has no effect 

$img->setResolution(200,200); 

//read the pdf 

$img->readImage("{$pdf_file}[0]"); 
0

क्लिक करें here: कुछ इस तरह की कोशिश करो। इस प्रयास करें:

एचटीएमएल

<html> 

    <body> 

    <form action="ConvertPdfToImg.php" enctype="multipart/form-data" method="post" name="f1"> 

     <input id="templateDoc" name="templateDoc" type="file" /> 

     <input type="submit" /> 

    </form> 

    </body> 

</html> 

पीएचपी

$pdfAbsolutePath = __DIR__."/test.pdf"; 

if (move_uploaded_file($_FILES['templateDoc']["tmp_name"], $pdfAbsolutePath)) { 

     $im    = new imagick($pdfAbsolutePath); 

     $noOfPagesInPDF = $im->getNumberImages(); 

     if ($noOfPagesInPDF) { 

      for ($i = 0; $i < $noOfPagesInPDF; $i++) { 

       $url = $pdfAbsolutePath.'['.$i.']'; 

       $image = new Imagick($url); 

       $image->setImageFormat("jpg"); 

       $image->writeImage(__DIR__."/".($i+1).'-'.rand().'.jpg'); 

      } 

      echo "All pages of PDF is converted to images"; 

     } 
     echo "PDF doesn't have any pages"; 

} 
+0

आप पूरी तरह से बिंदु चूक गए हैं और यह सभी अनुरोध हैंडलिंग प्रश्न से बिल्कुल असंबंधित है। और आपको हमेशा स्पष्ट रूप से कहना चाहिए कि आप अपने ब्लॉग पर इशारा कर रहे हैं। –

संबंधित मुद्दे