图像平铺代码应用颜色过滤器

时间:2013-01-13 21:57:15

标签: php

我正在尝试使用不同的图像制作平铺图像。在第一个图块之后,第一个图块的平均颜色应用于另一个图块作为过滤器我如何使用每个瓷砖图片 没有过滤器? 我的代码如下;

<?php 

$dest = imagecreatefrompng('myimage.png');

$src[] = imagecreatefrompng('otter.png');
$src[] = imagecreatefrompng('fox.png');
$src[] = imagecreatefrompng('opals.png');

// Copy and merge
for($i=0;$i<count($src);$i++){
imagecopymerge($dest, $src[$i], 32*$i, 0, 0, 0, 32, 32, 100);

}
// Output and free from memory
header('Content-Type: image/png');
imagepng($dest);
imagedestroy($dest);

for($ii=0;$ii<count($src);$ii++){
imagedestroy($src[$ii]);
}

?>

样本图块链接&gt; http://7kitap.com/fox.png

代码链接&gt; http://7kitap.com/fillimage.php

正如您将在上面的链接上看到的,图片颜色在第一个图块之后会发生变化。

2 个答案:

答案 0 :(得分:1)

尝试使用imagecreatetruecolor。也许第一张图片的颜色被用作其余图片的基础。

答案 1 :(得分:1)

您的脚本可能会有一些改进,如果您有更多$src张图片而不是填充width,您的图块渲染将无法正常工作。

我调整了您的代码以处理尽可能多的图块:

<?php 

$width = 320; // pick size
$height = 320; // pick size

$dest = imagecreatetruecolor($width, $height);

// I just added the same 3 pictures just to test the overflow
$src[] = imagecreatefrompng('otter.png');
$src[] = imagecreatefrompng('fox.png');
$src[] = imagecreatefrompng('opals.png');
$src[] = imagecreatefrompng('otter.png');
$src[] = imagecreatefrompng('fox.png');
$src[] = imagecreatefrompng('opals.png');
$src[] = imagecreatefrompng('otter.png');
$src[] = imagecreatefrompng('fox.png');
$src[] = imagecreatefrompng('opals.png');
$src[] = imagecreatefrompng('otter.png');
$src[] = imagecreatefrompng('fox.png');
$src[] = imagecreatefrompng('opals.png');
$src[] = imagecreatefrompng('otter.png');
$src[] = imagecreatefrompng('fox.png');
$src[] = imagecreatefrompng('opals.png');

$thumbnailWidth = 32; // Should be deduced from the thumbnails

$imagesPerRow = $width / $thumbnailWidth;
// Copy and merge
for($i=0;$i<count($src);$i++)
{
    // Using this code, your thumbnails will overflow to the next row
    $row = floor($i / $imagesPerRow);
    $column = $i % $imagesPerRow;
    imagecopymerge($dest, $src[$i], 32*$column, 32*$row, 0, 0, 32, 32, 100);
}
// Output and free from memory
header('Content-Type: image/png');
imagepng($dest);
imagedestroy($dest);

for($ii=0;$ii<count($src);$ii++){
    imagedestroy($src[$ii]);
}

?>

这会给你以下结果:

Tiles