How to replace black background with white when resizing/converting PNG images with transparent backgrounds to JPEG.

后端 未结 5 2129
执念已碎
执念已碎 2020-12-14 17:45

I am using a script that lets users upload images. The script resizes and converts the images to JPEG.

The problem I have is when a PNG with transparency is uploaded

相关标签:
5条回答
  • 2020-12-14 18:12

    I found this other similar question here on this site. I hope it is helpful.

    adding background color to transparent images using gd and php

    0 讨论(0)
  • 2020-12-14 18:15

    Try like this (not tested):

    case "png":
      $file = imagecreatetruecolor($width, $height);
      $new = imagecreatefrompng($this->file_tempname);
      imagefilledrectangle ($file, 0, 0, $width, $height, imagecolorallocate($file, 0,0,0))
    

    (predraw a white background on $file image)

    Also, the for($i=0; $i<256; $i++) { imagecolorallocate($file, $i, $i, $i); } part looks strange.

    0 讨论(0)
  • 2020-12-14 18:16

    Ok, this function is from php. As I've never worked with images on php, so I didn't know it.

    So, images a composed of three colors: RGB (red, green, blue). In case of PNG, it's also composed of another filter, called alpha, which is the transparency

    SO, just for PNG, you should switch imagecolorallocate to imagecolorallocatealpha($file,$i,$i,$i,$i);

    This should make your images transparent. Does this solve your problem or do you really need them in white background?

    Edit: I also noted that you are using imagejpg function in all cases. Switch them to the corresponding function, i.e., imagepng, imagebmp, imagegif

    0 讨论(0)
  • 2020-12-14 18:19

    After Image true colour add the lines:

        $file = imagecreatetruecolor($width, $height);
        $background = imagecolorallocate($file, 0, 0, 0);
        imagecolortransparent($file, $background);
        imagealphablending($file, false);
        imagesavealpha($file, true);
    

    This will help in mailtaining alpha for all formats. Ping if u dont get answer.

    0 讨论(0)
  • 2020-12-14 18:24
    switch($image_extension){
      case 'gif':
      case 'GIF':
        $image_orig_resource = imagecreatefromgif($image_orig_path);
        break;
      case 'png':
      case 'PNG':
        $image_orig_resource = imagecreatefrompng($image_orig_path);
        break;
      case 'jpg':
      case 'jpeg':
      case 'JPG':
      case 'JPEG':
        $image_orig_resource = imagecreatefromjpeg($image_orig_path);
        break;
      default:
        throw new Exception('Extension not supported');
    }
    
    $image_resource = imagecreatetruecolor($width, $height);
    imagefill($image_resource, 0, 0, imagecolorallocate($image_resource, 255, 255, 255));  // white background;
    
    imagecopyresampled($image_resource, $image_orig_resource, 0, 0, 0, 0, $width, $height, $image_orig_width, $image_orig_height);
    
    imagejpeg($image_resource, $image_path, 100); // quality: [0-100]
    
    0 讨论(0)
提交回复
热议问题