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

$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 に答える
1

imagecreatetruecolor を使用してみてください。おそらく、最初の画像の色が残りの画像のベースとして使用されています。

于 2013-01-13T22:12:29.507 に答える