当前位置: 首页 > 面试题库 >

如何在PHP中以透明方式调整png的大小?

车明贤
2023-03-14
问题内容

我正在尝试使用PHP中的透明背景调整png的大小,而我在网上发现的代码示例对我不起作用。这是我使用的代码,建议将不胜感激!

$this->image = imagecreatefrompng($filename);

imagesavealpha($this->image, true);
$newImage = imagecreatetruecolor($width, $height);

// Make a new transparent image and turn off alpha blending to keep the alpha channel
$background = imagecolorallocatealpha($newImage, 255, 255, 255, 127);
imagecolortransparent($newImage, $background);
imagealphablending($newImage, false);
imagesavealpha($newImage, true);

imagecopyresampled($newImage, $this->image, 0, 0, 0, 0, $width, $height,  $this->getWidth(), $this->getHeight());
$this->image = $newImage;  
imagepng($this->image,$filename);

更新 “不起作用”是指我调整png大小时背景颜色变为黑色。


问题答案:

据我所知, 在* 执行imagecolorallocatealpha() 之前 ,您需要将混合模式设置为false,将save alpha
channel标志设置为。true
*

<?php
/**
 * https://stackoverflow.com/a/279310/470749
 * 
 * @param resource $image
 * @param int $newWidth
 * @param int $newHeight
 * @return resource
 */
public function getImageResized($image, int $newWidth, int $newHeight) {
    $newImg = imagecreatetruecolor($newWidth, $newHeight);
    imagealphablending($newImg, false);
    imagesavealpha($newImg, true);
    $transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127);
    imagefilledrectangle($newImg, 0, 0, $newWidth, $newHeight, $transparent);
    $src_w = imagesx($image);
    $src_h = imagesy($image);
    imagecopyresampled($newImg, $image, 0, 0, 0, 0, $newWidth, $newHeight, $src_w, $src_h);
    return $newImg;
}
?>

更新 :此代码仅在不透明度= 0的背景透明上工作。如果图像的0 <不透明度<100,则为黑色背景。



 类似资料:
  • 问题内容: 嘿,当我从png创建缩略图时,尝试保持png的透明度时遇到麻烦,有人对此有任何经验吗?任何帮助都会很棒,这是我目前正在做的事情: 问题答案: 过去,我已经成功地做到了: 我发现输出图像使用质量更好的比

  • 本文向大家介绍如何在PHP中调整图片大小?,包括了如何在PHP中调整图片大小?的使用技巧和注意事项,需要的朋友参考一下 可以使用ImageMagick或GD功能调整图像大小。如果使用了GD的功能,则在对原始数码相机的图像进行采样时,图像文件的大小也会减小。我们将在下面的代码中看到如何使用GD调整图像大小。

  • 问题内容: 情况是这样的:我有一个小的50x50图片。我还有一个小的50x50透明图片,其中包含50x50图片的框架,因此我基本上想将透明png 放在图片上方 ,并将这两个图片合并,这将导致最终的第三张图片看起来像这样:http ://img245.imageshack.us/i/50x50n.png 注意:我不想只使用HTML来做到这一点(我通过编写一个将透明png放在原始图像顶部的javasc

  • 我正在尝试脚本创建视频使用ImageMagick创建一些覆盖,然后放在一个视频的顶部。 如果我尝试直接使用ImageMagick创建的图像,透明度会被绘制为不透明。 我已经使用ImageMagick绘制命令创建了一个透明的PNG。当加载到GIMP中并进行检查时,PNG具有alpha通道,并且每个透明像素看起来具有透明度:RGBA=0,0,0,0 我可以通过获取覆盖图像,在GIMP中加载它,然后选择

  • 问题内容: 我正在使用以下代码读取PNG图片: 在显示时,有一个黑色背景,我知道是由PNG透明性引起的。 我找到了建议使用的解决方案,但是我不确定如何将其应用于上面的代码。 问题答案: 创建第二个类型… 将原件涂到副本上… 您现在有了图像的非透明版本… 要保存图像,请看写/保存图像

  • 我正试图重新设计我的网站,使我原来的方形、基于瓷砖的图像渲染更像是图像的剪贴画。。。为了摆脱网格模式。 这是它最初的样子。。。 这是我想要的一个粗略的模型: 所以我重新保存了一个透明背景的图像缩略图。。。我只想让狗展示,正方形是透明的,可以在下面显示网站的背景。 然而,当我在页面上呈现它时,它的背景是黑色的。 我已经检查了我的CSS,看看是否有某种img类,或用于渲染漫画的类。。。甚至可以通过引导