使用GD Image的披萨片形状?

时间:2015-06-20 04:00:53

标签: php gd

我需要将普通的矩形图像“变换”为“pizze slice”。所以这个:

enter image description here

必须延伸到这个:

enter image description here

这样我就失去了实际的措辞,所以它不是100%正确。我需要它不仅掩盖这些部分,而且还“拉伸”切片使其适合新的三角形形状,因此没有任何文本丢失。

我的photoshopping技巧非常有限,我甚至无法在photoshop中进行适当的预览,以显示它必须如何剪裁。

如何使用GD Image进行此操作?

1 个答案:

答案 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');

结果:

pizza