PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Tuesday, October 11, 2022

[FIXED] How can I set the transparancy to image for particular background color in image - using PHP - GD

 October 11, 2022     gd, php, php-5.3     No comments   

Issue

Suppose I have any image(say passport type images where the background will be same around the user).

What I want to do is make that background image as transparent using PHP GD. So please let me know how can I achieve this? The example image is shown here. I want yellow color to be transparent. enter image description here


Solution

What you basically want to do is replace colors 'close' to your background color. By 'close' I mean colors that are similar to it:

// $src, $dst......
$src = imagecreatefromjpeg("dmvpic.jpg");

// Alter this by experimentation
define( "MAX_DIFFERENCE", 20 );

// How 'far' two colors are from one another / color similarity.
// Since we aren't doing any real calculations with this except comparison,
// you can get better speeds by removing the sqrt and just using the squared portion.
// There may even be a php gd function that compares colors already. Anyone?
function dist($r,$g,$b) {
   global $rt, $gt, $bt;
   return sqrt( ($r-$rt)*($r-$rt) + ($g-$gt)*($g-$gt) + ($b-$bt)*($b-$bt) );
}

// Alpha color (to be replaced) is defined dynamically as 
// the color at the top left corner...
$src_color = imagecolorat( $src ,0,0 );
$rt = ($src_color >> 16) & 0xFF;
$gt = ($src_color >> 8) & 0xFF;
$bt = $src_color & 0xFF;

// Get source image dimensions and create an alpha enabled destination image
$width = imagesx($src);
$height = imagesy($src);
$dst = =imagecreatetruecolor( $width, $height ); 
imagealphablending($dst, true);
imagesavealpha($dst, true);

// Fill the destination with transparent pixels
$trans = imagecolorallocatealpha( $dst, 0,0,0, 127 ); // our transparent color
imagefill( $dst, 0, 0, $transparent ); 

// Here we examine every pixel in the source image; Only pixels that are
// too dissimilar from our 'alhpa' or transparent background color are copied
// over to the destination image.
for( $x=0; $x<$width; ++$x ) {
  for( $y=0; $y<$height; ++$y ) {
     $rgb = imagecolorat($src, $x, $y);
     $r = ($rgb >> 16) & 0xFF;
     $g = ($rgb >> 8) & 0xFF;
     $b = $rgb & 0xFF;

     if( dist($r,$g,$b) > MAX_DIFFERENCE ) {
        // Plot the (existing) color, in the new image
        $newcolor = imagecolorallocatealpha( $dst, $r,$g,$b, 0 );
        imagesetpixel( $dst, $x, $y, $newcolor );
     }
  }
}

header('Content-Type: image/png');
imagepng($dst);
imagedestroy($dst);
imagedestroy($src);

Please note above code is untested, I just typed it in stackoverflow so I may have some retarded spelling errors, but it should at bare minimal point you in the right direction.



Answered By - Authman Apatira
Answer Checked By - Marie Seifert (PHPFixing Admin)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing