0

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

<?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]);
}

?>

示例图块链接 > http://7kitap.com/fox.png

代码链接 > http://7kitap.com/fillimage.php

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

4

2 回答 2

1

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

于 2013-01-13T22:12:29.507 回答
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]);
}

?>

这将为您提供以下结果:

瓷砖

于 2013-01-13T22:21:24.273 回答