2012-05-25 18 views
5

सहेजें मैं PHP प्लेटफ़ॉर्म पर काम कर रहे किसी भी छवि की अपलोड की गई सफेद पृष्ठभूमि को हटाना चाहता हूं। अपलोडिंग फ़ंक्शन किया जाता है लेकिन इस कार्यक्षमता के साथ गड़बड़ हो जाती है।PHP के साथ छवि पृष्ठभूमि हटाएं और पारदर्शी पीएनजी

यहाँ लिंक मैं यहाँ पाया है: Remove white background from an image and make it transparent

लेकिन यह रिवर्स कर रही है। मैं रंगीन पृष्ठभूमि को हटाना चाहता हूं और इसे पारदर्शी पृष्ठभूमि के साथ छवि बनाना चाहता हूं।

+3

कृपया शून्य से वोट के लिए कारण –

+0

अधिक समझाने और हमें आप क्या किया है उल्लेख करने के लिए, और मैं कर रहा हूँ जो नीचे गिराया नहीं है। –

+0

मैंने अभी अपना प्रश्न संपादित किया है। –

उत्तर

0

php छवि प्रसंस्करण का प्रयोग करें और जी.डी., आरजीबी घटक हैं अगर पिक्सेल द्वारा छवि पिक्सेल पढ़ा सभी 255 (पिक्सेल सफेद है), 255 (पारदर्शी) को अल्फा चैनल की स्थापना की। अपलोड की गई फ़ाइल टाइप अल्फा चैनल का समर्थन करता है, तो आपको छवि की फ़ाइल प्रकार बदलनी पड़ सकती है।

4

चूंकि आपको केवल एकल-रंग पारदर्शिता की आवश्यकता है, इसलिए सबसे आसान तरीका imagecolortransparent() के साथ सफेद परिभाषित करना है। इस तरह कुछ (अवांछित कोड):

$img = imagecreatefromstring($your_image); //or whatever loading function you need 
$white = imagecolorallocate($img, 255, 255, 255); 
imagecolortransparent($img, $white); 
imagepng($img, $output_file_name); 
+0

मैंने डिस्क पर अवांछित वर्ण दिखाने की कोशिश की: $ file = 'itsmehere.png'; // पथ से पीएनजी छवि $ img = imagecreatefrompng ($ फ़ाइल); // खुली छवि $ सफेद = imagecolorallocate ($ img, 255, 255, 255); imagecolortransparent ($ img, $ रंग); imagepng ($ img, $ output_file_name); –

+0

कृपया 'अवांछित वर्ण' पर विस्तृत करें। – Maerlyn

+0

यह एक चेतावनी है (कि imagefill() को एक अवैध संसाधन मिलता है), फिर एक पीएनजी छवि। – Maerlyn

1

छवि में सफेद रंग की अनुक्रमणिका प्राप्त करें और इसे पारदर्शी पर सेट करें।

$whiteColorIndex = imagecolorexact($img,255,255,255); 
$whiteColor = imagecolorsforindex($img,$whiteColorIndex); 
imagecolortransparent($img,$whiteColor); 

यदि आप सही रंग नहीं जानते हैं तो आप वैकल्पिक रूप से imagecolorclosest() का उपयोग कर सकते हैं।

4
function transparent_background($filename, $color) 
{ 
    $img = imagecreatefrompng('image.png'); //or whatever loading function you need 
    $colors = explode(',', $color); 
    $remove = imagecolorallocate($img, $colors[0], $colors[1], $colors[2]); 
    imagecolortransparent($img, $remove); 
    imagepng($img, $_SERVER['DOCUMENT_ROOT'].'/'.$filename); 
} 

transparent_background('logo_100x100.png', '255,255,255'); 
2

ImageMagick आज़माएं यह मेरे लिए चाल है। आप उस रंग की मात्रा को भी नियंत्रित कर सकते हैं जिसे हटाने की आवश्यकता है। बस छवि पथ, आरजीबी की सरणी के रूप में बीजीकलर, और प्रतिशत में फ़ज़ पास करें। जब तक आपके पास आपके सिस्टम/होस्टिंग पर ImageMagick इंस्टॉल हो। मेरे पास मेरे होस्टिंग प्रदाता ने मॉड्यूल के रूप में इसे मेरे लिए स्थापित किया था।

मैं ImageMagick संस्करण का उपयोग कर रहा हूँ 6.2.8

उदाहरण:

$image = "/path/to/your/image.jpg"; 
    $bgcolor = array("red" => "255", "green" => "255", "blue" => "255"); 
    $fuzz = 9; 
    remove_image_background($image, $bgcolor, $fuzz); 

     protected function remove_image_background($image, $bgcolor, $fuzz) 
     { 
      $image = shell_exec('convert '.$image.' -fuzz '.$fuzz.'% -transparent "rgb('.$bgcolor['red'].','.$bgcolor['green'].','.$bgcolor['blue'].')" '.$image.''); 
      return $image; 
     } 
0

@ geoffs3310 से समारोह को स्वीकार कर लिया जवाब यहाँ है, लेकिन नोट किया जाना चाहिए, कि png बचाया एक अल्फा शामिल नहीं है चैनल।

पृष्ठभूमि हटाने और अल्फा के साथ एक पारदर्शी PNG के रूप में नए png बचाने निम्नलिखित कोड काम करता है

$_filename='/home/files/IMAGE.png'; 
$_backgroundColour='0,0,0'; 
$_img = imagecreatefrompng($_filename); 
$_backgroundColours = explode(',', $_backgroundColour); 
$_removeColour = imagecolorallocate($_img, (int)$_backgroundColours[0], (int)$_backgroundColours[1], (int)$_backgroundColours[2]); 
imagecolortransparent($_img, $_removeColour); 
imagesavealpha($_img, true); 
$_transColor = imagecolorallocatealpha($_img, 0, 0, 0, 127); 
imagefill($_img, 0, 0, $_transColor); 
imagepng($_img, $_filename); 
संबंधित मुद्दे