2011-05-23 14 views
5

मेरे पास पीडीएफ के जेपीजी थंबनेल को निम्नानुसार बनाने के लिए एक php स्क्रिप्ट है;php Imagemagick jpg black background

<?php 
$file ="test.pdf"; 
$im = new imagick(realpath($file).'[0]'); 
$im->setImageFormat("jpg"); 
$im->resizeImage(200,200,1,0); 
// start buffering 
ob_start(); 
$thumbnail = $im->getImageBlob(); 
$contents = ob_get_contents(); 
ob_end_clean(); 
echo "<img src='data:image/jpg;base64,".base64_encode($thumbnail)."' />"; 
?> 

लेकिन परिणामी जेपीजी के पास सफेद रंग की बजाय काले पृष्ठभूमि है .. मैं इसे कैसे ठीक कर सकता हूं ??

+0

प्रश्न में जेपीजी फ़ाइल की प्रतिलिपि या लिंक उपयोगी होगा और परिणामी आउटपुट का एक स्क्रीन शॉट भी होगा। –

+0

लॉरेंस बर्क: यहां परिणामस्वरूप छवि है http://i.imgur.com/jyQC6.jpg –

+0

आपका सीएसएस स्टाइल जैसा है और क्या आप मूल jpg लिंक कर सकते हैं ??? –

उत्तर

1

मैं इसे हल किया;

$im = new imagick(realpath($file).'[0]'); 
$im->setCompression(Imagick::COMPRESSION_JPEG); 
$im->setCompressionQuality(100); 
$im->setImageFormat("jpeg"); 
$im->writeImage("imagename.jpg"); 
+0

'setCompressionQuality' वास्तव में इस स्थिति में काम नहीं कर रहा है। परिवर्तन गुणवत्ता के लिए 'setImageCompressionQuality' – vatavale

1

यदि इमेगिक का आपका संस्करण अद्यतित नहीं है, तो setImageBackgroundColor गलत हो सकता है।

स्वैप निम्न पंक्ति

$im->setImageBackgroundColor("red"); 
इस के लिए

(Imagick संस्करण> = 2.1.0)

$im->setBackgroundColor(new ImagickPixel("red")); 

या (Imagick संस्करण < 2.1.0)

$im->setBackgroundColor("red"); 
+0

मैंने अपने प्रश्न में कुछ बदलाव किए हैं .. एक नज़र डालें .. और आपका सुझाव काम नहीं कर रहा है .. –

+0

@blasteralfred क्या आप अपने पीडीएफ की एक प्रति तक पहुंच प्रदान कर सकते हैं क्योंकि मुझे विश्वास है कि समस्या हो सकती है आपके द्वारा अब प्रदान किए गए कोड के बजाए उससे संबंधित रहें। अद्यतन कोड मेरे पास पीडीएफ के बिना समस्या के बिना काम करता है। – carlgarner

1

सीधे शब्दों में जोड़ने इस रोकता है अगर आप एक पृष्ठभूमि रंग मुद्दे का सामना जेपीजी एक काले रंग की पृष्ठभूमि

-alpha off 
+0

कहां उपयोग करें?कृपया प्रश्न के प्रारूप में एक उत्तर दें। तो इस मामले में वैध PHP। –

1

परिवर्तन इस कोड $im->setimageformat("png"); के लिए इस कोड $im->setimageformat("jpg"); के साथ बनाया जा करने के लिए।

1

पहले से तैनात जवाब में से कोई भी लेकिन मेरे लिए काम किया नीचे किया:

$image = new Imagick; 

$image->setResolution(300, 300); 

$image->readImage("${originalPath}[0]"); 

$image->setImageFormat('jpg'); 

$image->scaleImage(500, 500, true); 

$image->setImageAlphaChannel(Imagick::VIRTUALPIXELMETHOD_WHITE); 

जैसा कि मैंने Laravel ढांचे का उपयोग कर रहा मैं तो परिवर्तित छवि लेने के लिए और Laravels फ़ाइल सिस्टम का उपयोग यह दुकान।

Storage::put($storePath, $image->getImageBlob()); 

अद्यतन: तो मैं हाल ही में बदली हुई ओएस और जबकि यह पहले से मेरे Mac कुछ छवियों पर मेरे Ubuntu मशीन पर काम किया अभी भी ब्लैक आउट आ रहे थे।

मैं नीचे करने के लिए स्क्रिप्ट बदलना पड़ा:

$image = new Imagick; 

$image->setResolution(300, 300); 

$image->setBackgroundColor('white'); 

$image->readImage("${originalPath}[0]"); 

$image->setImageFormat('jpg'); 

$image->scaleImage(500, 500, true); 

$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN); 

$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE); 

महत्वपूर्ण लगता है छवि में पढ़ने से पहले पृष्ठभूमि रंग सेट करने के लिए। मैं किसी भी संभावित परतों को भी फ़्लैट करता हूं और अल्फा चैनल को हटा देता हूं। मुझे लगता है कि मैंने अपनी उबंटू मशीन पर ALPHACHANNEL_REMOVE की कोशिश की और यह उम्मीद नहीं की कि इन उत्तरों के बीच पाठकों को कुछ ऐसा मिल सकता है जो उनके लिए काम करता है।

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