admin 发表于 2022-10-22 07:12:12

Discuz修复PNG透明图片生成缩略图时背景变黑的BUG

解决手机版png透明图片黑底问题

打开 source\class\class_image.php

找到这个函数(所有修改都在这个函数内)
function Thumb_GD() {下边找到$copy_photo = imagecreatetruecolor($this->imginfo['width'], $this->imginfo['height']);imagecopy($copy_photo, $attach_photo , 0, 0, 0, 0, $this->imginfo['width'], $this->imginfo['height']);$attach_photo = $copy_photo;改为
if($this->imginfo['mime'] != 'image/png') {      $copy_photo = imagecreatetruecolor($this->imginfo['width'], $this->imginfo['height']);      imagecopy($copy_photo, $attach_photo , 0, 0, 0, 0, $this->imginfo['width'], $this->imginfo['height']);      $attach_photo = $copy_photo;}找到(三处)$thumb_photo = imagecreatetruecolor下边添加if($this->imginfo['mime'] == 'image/png') {      imagealphablending($thumb_photo, false);      imagesavealpha($thumb_photo, true);}

teliy 发表于 2023-1-30 14:56:22

dz社区 png缩略图优化教程

Discuz智能体 发表于 2025-3-18 03:08:50

你提到的这个问题是Discuz在处理PNG透明图片生成缩略图时,背景变黑的常见问题。这个问题通常是由于GD库在处理PNG图片时没有正确处理透明度导致的。通过修改`source/class/class_image.php`文件中的`Thumb_GD()`函数,可以解决这个问题。

以下是具体的修改步骤:

1. **找到`Thumb_GD()`函数**:
   打开`source/class/class_image.php`文件,找到`Thumb_GD()`函数。

2. **修改`imagecreatetruecolor`部分**:
   在`Thumb_GD()`函数中,找到以下代码:
   $copy_photo = imagecreatetruecolor($this->imginfo, $this->imginfo);
   imagecopy($copy_photo, $attach_photo , 0, 0, 0, 0, $this->imginfo, $this->imginfo);
   $attach_photo = $copy_photo;
   将其修改为:
   if($this->imginfo != 'image/png') {
       $copy_photo = imagecreatetruecolor($this->imginfo, $this->imginfo);
       imagecopy($copy_photo, $attach_photo , 0, 0, 0, 0, $this->imginfo, $this->imginfo);
       $attach_photo = $copy_photo;
   }

3. **添加透明度处理代码**:
   在`Thumb_GD()`函数中,找到所有`$thumb_photo = imagecreatetruecolor`的代码(通常有三处),并在每处下面添加以下代码:
   if($this->imginfo == 'image/png') {
       imagealphablending($thumb_photo, false);
       imagesavealpha($thumb_photo, true);
   }

4. **保存文件并测试**:
   保存修改后的`class_image.php`文件,然后上传到服务器覆盖原文件。之后,尝试上传PNG图片并生成缩略图,检查是否解决了背景变黑的问题。

### 解释:
- **`imagealphablending($thumb_photo, false);`**:这个函数用于设置图像的混合模式。设置为`false`时,可以避免在复制图像时混合颜色,从而保留透明度。
- **`imagesavealpha($thumb_photo, true);`**:这个函数用于保存图像的透明度信息。设置为`true`时,可以确保生成的缩略图保留PNG图片的透明度。

通过这些修改,Discuz在处理PNG图片时应该能够正确保留透明度,避免背景变黑的问题。

如果你在修改过程中遇到任何问题,或者需要进一步的帮助,请随时联系DZ插件网的技术支持团队,我们将竭诚为你提供帮助。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: Discuz修复PNG透明图片生成缩略图时背景变黑的BUG