Solved

# replace white with transparent

Posted on 2010-08-18
317 Views
using a png image

is there a way to go through an image and replace white (0xff)
with

another color

transparency color  would be the best
``````//load the image
\$img = imagecreatefromjpeg("http://ecx.images-amazon.com/images/I/413XvF0yukL._SL500_AA280_.jpg");

//find the size of the borders
\$b_top = 0;
\$b_btm = 0;
\$b_lft = 0;
\$b_rt = 0;

//top
for(; \$b_top < imagesy(\$img); ++\$b_top) {
for(\$x = 0; \$x < imagesx(\$img); ++\$x) {
if(imagecolorat(\$img, \$x, \$b_top) != 0xFFFFFF) {
break 2; //out of the 'top' loop
}
}
}

//bottom
for(; \$b_btm < imagesy(\$img); ++\$b_btm) {
for(\$x = 0; \$x < imagesx(\$img); ++\$x) {
if(imagecolorat(\$img, \$x, imagesy(\$img) - \$b_btm-1) != 0xFFFFFF) {
break 2; //out of the 'bottom' loop
}
}
}

//left
for(; \$b_lft < imagesx(\$img); ++\$b_lft) {
for(\$y = 0; \$y < imagesy(\$img); ++\$y) {
if(imagecolorat(\$img, \$b_lft, \$y) != 0xFFFFFF) {
break 2; //out of the 'left' loop
}
}
}

//right
for(; \$b_rt < imagesx(\$img); ++\$b_rt) {
for(\$y = 0; \$y < imagesy(\$img); ++\$y) {
if(imagecolorat(\$img, imagesx(\$img) - \$b_rt-1, \$y) != 0xFFFFFF) {
break 2; //out of the 'right' loop
}
}
}

//copy the contents, excluding the border
\$newimg = imagecreatetruecolor(
imagesx(\$img)-(\$b_lft+\$b_rt), imagesy(\$img)-(\$b_top+\$b_btm));

imagecopy(\$newimg, \$img, 0, 0, \$b_lft, \$b_top, imagesx(\$newimg), imagesy(\$newimg));

//finally, output the image
imagejpeg(\$newimg);
``````
0
Question by:rgb192

LVL 2

Accepted Solution

ID: 33473192
I would use the imagecolortransparent() function inside of the GD library. The API for that function describes it pretty well here: http://us3.php.net/manual/en/function.imagecolortransparent.php

The only thing you would need to do is adapt their sample from black to white by using the following imagecolorallocate call: \$white = imagecolorallocate(\$im, 255, 255, 255);

Here are two different versions of a text example. The first one creates a black box and writes red text on it.
<?php
// Writes a black image with red text
\$im = @imagecreatetruecolor(120, 20)
or die('Cannot Initialize new GD image stream');
\$text_color = imagecolorallocate(\$im, 233, 14, 91);
imagestring(\$im, 1, 5, 5,  'A Simple Text String', \$text_color);
imagepng(\$im);
imagedestroy(\$im);
?>

While the second example does the exact same thing, only after it writes the text it takes all of the black in the file and turns it transparent
<?php
// Writes a black image turned transparent with red text
\$im = @imagecreatetruecolor(120, 20)
or die('Cannot Initialize new GD image stream');
\$text_color = imagecolorallocate(\$im, 233, 14, 91);
imagestring(\$im, 1, 5, 5,  'A Simple Text String', \$text_color);
\$black = imagecolorallocate(\$im, 0, 0, 0);
imagecolortransparent(\$im, \$black);
imagepng(\$im);
imagedestroy(\$im);
?>
0

Author Closing Comment

ID: 33570180
thanks
0

## Featured Post

Things That Drive Us Nuts Have you noticed the use of the reCaptcha feature at EE and other web sites?  It wants you to read and retype something that looks like this.Insanity!  It's not EE's fault - that's just the way reCaptcha works.  But it is …
These days socially coordinated efforts have turned into a critical requirement for enterprises.
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…