Я создаю несколько частичных изображений из одного изображения, чтобы использовать для наложения карты. Проблема, с которой я сталкиваюсь, заключается в том, что первое изображение создано успешно, а остальные черные. Я подозреваю, что imagecreatefrompng является виновником, и он не может работать несколько раз, не очищая его, и поэтому мои изображения черные, потому что изображение равно нулю. Пожалуйста, помогите мне найти подходящее решение для моего кода ниже. Заранее спасибо.PHP, создающий несколько изображений из одного изображения с использованием функции imagecreatefrompng в цикле
Все в моем коде работает, за исключением создания изображения. Как я уже говорил, он успешно создает изображение. Выход моего цикла говорит все, что он должен сказать.
for($x = 0; $x <= $loop; $x++)
{
//Check for direcotory for X
$x_directory = 'generated_images/' . $dbn . '/' . $zoom . '/' . $x;
if (!file_exists($x_directory))
{
mkdir($x_directory, 0777, true);
}//end if
//Set Starting Y Copy Values
$startY = 0;
$endY = 1;
for($y = 0; $y <= $loop; $y++)
{
//Do not need to check for Y images, we will replace any exsisting images
//Set a time limit for each Y image
set_time_limit(15);
$time = time();
$src_image = imagecreatefrompng('generated_images/pre'. $dbn .'.png') or die('Problem with source');
$y_image = imagecreatetruecolor($image_w,$image_h) or die('Problem In Creating image');
if(($x >= 2 && $x <= 5) && ($y >= 5 && $y <= 6)) {
?>
<p>
Start X: <?=$startX?> <br/>
Start Y: <?=$startY?> <br/>
End X: <?=$endX?> <br/>
End Y: <?=$endY?> <br/>
<?
//imagecopyresized($y_image, $src_image, 0, 0, $startX, $startY, $image_w, $image_h, 1024, 1024);
//Set the blending mode for an image
imagealphablending($y_image, false);
imagesavealpha($y_image, true);
// scan image pixels
for ($pix_y = ($startY * $multiplier); $pix_y < ($endY * $multiplier) ; $pix_y++) {
for ($pix_x = ($startX *$multiplier); $pix_x < ($endX * $multiplier) ; $pix_x++) {
$out_pix = imagecolorat($src_image,$pix_x,$pix_y);
$colors = imagecolorsforindex($y_image, $out_pix);
//$src_pix_array = rgb_to_array($src_pix);
if($colors['red'] == 0 && $colors['green'] == 0 && $colors['blue'] == 0) $alpha = 127;
else $alpha = 80;
imagesetpixel($y_image, $pix_x, $pix_y, imagecolorallocatealpha($y_image, $colors['red'], $colors['green'], $colors['blue'], $alpha));
}//end for
}//end for
$startY++;
$endY++;
imagepng($y_image,$x_directory . '/' . $y . '.png') or die('Problem saving image: ' . $x_directory . '/' . $y . '.png');
imagedestroy($y_image);
//imagedestroy($src_image);
}//end if
else
{
$black = imagecolorallocate($y_image, 0, 0, 0);
// Make the background transparent
imagecolortransparent($y_image, $black);
imagepng($y_image,$x_directory . '/' . $y . '.png') or die('Problem saving image: ' . $x_directory . '/' . $y . '.png');
imagedestroy($y_image);
}
$time = time() - $time;
?>
Image <?=$x?>,<?=$y?> time: <?=$time?> Seconds <br/>
<?
}
//end for y
if(($x >= 2 && $x <= 5)) {
$startX++;
$endX++;
}
}//end for x
вы можете использовать только imagecreatefrompng() один раз? – mcphersonjr
Также вы могли бы привести только короткий пример? – mcphersonjr
Ответьте на короткий пример, если вы умны, вы быстро это выясните. P.S. Daca e mai vb maine, в функциях – ied3vil