PHP

2008-11-23 6 views
43

के साथ पीएनजी पारदर्शिता अरे मुझे एक पीएनजी पर पारदर्शिता बनाए रखने की कोशिश करने में कुछ परेशानी हो रही है जब मैं इससे थंबनेल बनाता हूं, किसी के साथ इसका कोई अनुभव होता है? किसी भी मदद बहुत अच्छा होगा, यहाँ मैं वर्तमान में क्या कर रहा हूँ है:PHP

$fileName= "../js/ajaxupload/tees/".$fileName; 

list($width, $height) = getimagesize($fileName); 

$newwidth = 257; 
$newheight = 197; 

$thumb = imagecreatetruecolor($newwidth, $newheight); 
imagealphablending($thumb, true); 
$source = imagecreatefrompng($fileName); 
imagealphablending($source, true); 

imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

imagesavealpha($thumb, true); 
imagepng($thumb,$newFilename); 

उत्तर

81

मैं सफलता अतीत में इस तरह कर रहा था:

$thumb = imagecreatetruecolor($newwidth, $newheight); 
imagealphablending($thumb, false); 
imagesavealpha($thumb, true); 

$source = imagecreatefrompng($fileName); 
imagealphablending($source, true); 

imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

imagepng($thumb,$newFilename); 

मैं उत्पादन छवि गुणवत्ता काफी बेहतर imagecopyresampled()imagecopyresized() से

+0

जो इसे क्रैक किया! बहुत आभारी! – BastardPrince

+1

यह मेरे लिए काम नहीं करता है :( – 2by

+0

+1 धन्यवाद, मेरे लिए काम किया –

1

dycey's answer to "How do I resize..." देखें। अनिवार्य रूप से, आपको किसी भी अन्य परिचालन करने से पहले पारदर्शिता के साथ पूरी पृष्ठभूमि को भरने की आवश्यकता है।

+0

वह प्रश्न अभी भी अनुत्तरित नहीं है। हालांकि, शायद दोनों को विलय करने की आवश्यकता है। – strager

2

imagecopyresized पारदर्शिता का सही समर्थन नहीं करता है।

imagecopymerge करता है, लेकिन यह आकार बदलता नहीं है।

समाधान? आप शायद मैन्युअल रूप से चीज़ का आकार बदलना समाप्त कर देंगे।

2

उन कार्यों अंतर्निहित gdlib लाइब्रेरी का उपयोग है, जो एक है का उपयोग कर पाया अच्छा खिलौना, लेकिन ऐसा कुछ नहीं जो अच्छे नतीजों के लिए बनाता है। यदि आपके पास विकल्प है, तो इसके बजाय imagemagick का उपयोग करें। नकारात्मकता यह है कि वर्तमान में कोई अच्छी php-bindings नहीं हैं, इसलिए आपको इसे खोल पर एक्सेस करना होगा, जिसे साझा किए गए होस्ट पर आपको आमतौर पर अनुमति नहीं दी जाती है।

13

रंग पारदर्शिता सूचकांक को भूल जाएं, यह सभी प्रतिपादन उत्पादों में कभी भी काम नहीं करता है। इसके बजाय अल्फा लेयर मास्क का उपयोग करें:

$image = imagecreatetruecolor($size, $size); 

imagealphablending($image, false); 
imagesavealpha($image, true); 

$trans_layer_overlay = imagecolorallocatealpha($image, 220, 220, 220, 127); 
imagefill($image, 0, 0, $trans_layer_overlay); 
+0

बहुत बढ़िया! इसे समझने के लिए एक घंटे से अधिक समय तक बर्बाद हो गया और आपका समाधान केवल एक ही काम किया! –

+0

पहले से बिल्कुल सही! आप महान आदमी @ user629089 हैं। आपको बहुत धन्यवाद। – rasputin

+3

क्या आप समझा सकते हैं कि आपने '220, 220, 220 का उपयोग क्यों किया '? –