我需要将普通的矩形图像“变换”为“pizze slice”。所以这个:
必须延伸到这个:
这样我就失去了实际的措辞,所以它不是100%正确。我需要它不仅掩盖这些部分,而且还“拉伸”切片使其适合新的三角形形状,因此没有任何文本丢失。
我的photoshopping技巧非常有限,我甚至无法在photoshop中进行适当的预览,以显示它必须如何剪裁。
如何使用GD Image进行此操作?
答案 0 :(得分:3)
这应该完成工作 - 脚本被注释,所以你应该没有理解它。
<?php
$img = imagecreatetruecolor(600, 130);
$text = "Text that can be\nwrapped to next line";
//draw red background
imagefilledrectangle($img, 0, 0, imagesx($img), imagesy($img), 0xa00000);
//draw green text
putenv('GDFONTPATH=/usr/share/fonts/TTF');
imagettftext($img, 40, 0, 20, 50, 0x00a000, 'arial.ttf', $text);
//stretch whole thing vertically
$img = imagescale($img, imagesx($img), imagesy($img) * 2);
//compute pizza transformation
$y_arr = [];
for ($x = 0; $x < imagesx($img); $x++)
{
//compute simple "triangle" shape
$linear_y = $x * imagesy($img) / 2 / imagesx($img);
//get some variations with cos()
$cos_y = cos($x * 2 * M_PI / imagesx($img));
$cos_y *= cos($x * 2 * M_PI / imagesx($img) / 2);
$cos_y = (1 - $cos_y) * imagesy($img) / 4;
//finally combine these two
$y = ($cos_y + $linear_y * 2) / 3;
//and push the coordinate onto stack
$y_arr []= $y;
}
//create target image
$dstimg = imagecreatetruecolor(imagesx($img), imagesy($img));
//scale each column according to pizza transformation
foreach ($y_arr as $x => $y)
imagecopyresized($dstimg, $img, $x, $y, $x, 0, 1, max(1, imagesy($img) - 2 * $y), 1, imagesy($img) - 1);
//write the image to PNG file
imagepng($dstimg, 'test.png');
结果: