How to save transparent background in PNG when resizing using PHP?

I had a problem when resizing images using PHP, especially with PNG files with a transparent background, instead of maintaining a transparent background, it turns into a black background. How can i fix this?

This is the script for resizing:

<?php class resize{ var $image; var $image_type; function load($filename) { $image_info = getimagesize($filename); $this->image_type = $image_info[2]; if( $this->image_type == IMAGETYPE_JPEG ) { $this->image = imagecreatefromjpeg($filename); } elseif( $this->image_type == IMAGETYPE_GIF ) { $this->image = imagecreatefromgif($filename); } elseif( $this->image_type == IMAGETYPE_PNG ) { $this->image = imagecreatefrompng($filename); } } function save($filename, $image_type=IMAGETYPE_JPEG, $compression=85, $permissions=null) { if( $image_type == IMAGETYPE_JPEG ) { imagejpeg($this->image,$filename,$compression); } elseif( $image_type == IMAGETYPE_GIF ) { imagegif($this->image,$filename); } elseif( $image_type == IMAGETYPE_PNG ) { imagepng($this->image,$filename); } if( $permissions != null) { chmod($filename,$permissions); } } function output($image_type=IMAGETYPE_JPEG) { if( $image_type == IMAGETYPE_JPEG ) { imagejpeg($this->image); } elseif( $image_type == IMAGETYPE_GIF ) { imagegif($this->image); } elseif( $image_type == IMAGETYPE_PNG ) { imagepng($this->image); } } function getWidth() { return imagesx($this->image); } function getHeight() { return imagesy($this->image); } function resizeToHeight($height) { $ratio = $height / $this->getHeight(); $width = $this->getWidth() * $ratio; $this->resize($width,$height); } function resizeToWidth($width) { $ratio = $width / $this->getWidth(); $height = $this->getheight() * $ratio; $this->resize($width,$height); } function scale($scale) { $width = $this->getWidth() * $scale/100; $height = $this->getheight() * $scale/100; $this->resize($width,$height); } function resize($width,$height) { $new_image = imagecreatetruecolor($width, $height); imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); $this->image = $new_image; } } ?> 

And here is what I call it:

 $picture_directory="images/" . $_FILES["file"]["name"]; include('arqinc/resizing.php'); $image = new resize(); $image->load($picture_directory); $image->resize(660,780); $image->save($picture_directory); 

EDIT:

ive changed my resize function:

 function resize($width,$height) { $new_image = imagecreatetruecolor($width, $height); $transparent=imagefill($new_image, 0, 0, imagecolorallocatealpha($new_image, 255, 255, 255, 127)); imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); $this->image = $new_image; } 

But now it retains background white, not transparent.

EDIT 2:

Solved, this resize function is broken, this one works flawlessly:

http://mediumexposure.com/smart-image-resizing-while-preserving-transparency-php-and-gd-library/

Thanks to Tahir Yasin for linking him: D

+4
source share
3 answers

I found another post with the same question, according to this post the following code can be used to maintain transparency.

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

Link: Is it possible to keep PNG image transparent when using PHP GDlib imagecopyresampled?

Please vote if this helps you. :)

+6
source

You need to use imagepng($new_image,$file_name) after the line of code for imagecopyresampled() . replace $ file_name with the name you want to keep.

php imagepng() - Used to output a PNG image from the created image

0
source

this function works

 function resize($width,$height) { $new_image = imagecreatetruecolor($width, $height); $transparent=imagefill($new_image, 0, 0, imagecolorallocatealpha($new_image, 255, 255, 255, 127)); imagealphablending($new_image, false); imagesavealpha($new_image, true); imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); $this->image = $new_image; } 
0
source

Source: https://habr.com/ru/post/1442012/


All Articles