我尝试从数据库生成 JPEG 文件,其中包含位于容器中的元素,其中包含坐标 (x,y)、大小 (w/h)、x 轴角度和纹理图像。
我在服务器(apache2)和php8上安装了GD扩展。
我知道 imagerotate() 函数,但它仅适用于 Z 轴(根据我的理解)。
所以我的问题是:是否还有其他函数允许在 X 轴上使用 GD 旋转图像?
根据我的理解,这是 Skew-Y 的等价物。 Imagick 有这个功能,但是如果有人想在没有 Imagick 的情况下实现这个功能,你可以尝试这个。
这是我的带有 X 角度和 Y 角度参数的通用倾斜代码。
$srcFile = '1.jpg';
$dstFile = '1-Skew.png';
$src = imagecreatefromstring(file_get_contents($srcFile));
$dst = skewImage($src, 0, 10);
imagepng($dst, $dstFile);
function skewImage($src, $angleX = 0, $angleY = 0, $fillColor = null) {
$width = imagesx($src);
$height = imagesy($src);
$slopeX = tan($angleX * pi() / 180);
$slopeY = tan($angleY * pi() / 180);
$dstWidth = $height * $slopeX + $width;
$dstHeight = $width * $slopeY + $height;
$dst = ImageCreateTrueColor($dstWidth, $dstHeight);
imagealphablending($dst, false);
if (is_null($fillColor)) {
$transparency = imagecolorallocatealpha($dst, 0, 0, 0, 127);
imagefill($dst, 0, 0, $transparency);
} else if (strlen($fillColor) == 7) {
list ($r, $g, $b) = sscanf($fillColor, "#%02x%02x%02x");
$bkColor = imagecolorallocate($dst, $r, $g, $b);
imagefill($dst, 0, 0, $bkColor);
}
for($x = 0; $x < $width; ++$x) {
for($y = 0; $y < $height; ++$y) {
$rgb = imagecolorat($src, $x, $y);
imagesetpixel($dst, $y * $slopeX + $x, $x * $slopeY + $y, $rgb);
}
}
imagesavealpha($dst, true);
return $dst;
}
额外的空间可以用任何颜色填充(...,$fillColor = '#FFFFFF'),也可以是透明的(...,$fillColor = null)。
如有需要请随时沟通