2015-12-03 2 views
2

Я хочу сгенерировать изображение с помощью библиотеки php gd, но у меня есть некоторые ошибки, иногда это работает, иногда это не так. Полное изображение не генерируется, только частично. Иногда в диагоналях.PHP GD библиотека, как сгенерировать матрицу с изображением пикселя из массива цветов

У меня есть строка типа «color_color_color» и т. Д., Которые я преобразовываю в массив, чтобы создать матрицу пикселей. Затем я разбираю массив с циклом и создаю изображение с заданным цветом пикселей. Затем я генерирую прозрачный цвет, сохраняя в png.

Иногда это работает, но первая строка и первый столбец не генерируются.

<?php 
//tell at the browser that is a picture 
header("Content-Type: image/png"); 

$size = $_POST['size']; 

//size of the picture 
$image = imagecreatetruecolor($size, $size); 


//color background example : "grayOne_black_grayOne_white_" ect... 
$first_array = explode("_", $_POST['field']); 


$white = imagecolorallocate($image, 255, 255, 255); 
$grayOne = imagecolorallocate($image, 225, 225, 225); 
$grayTwo = imagecolorallocate($image, 200, 200, 200); 
$grayThree = imagecolorallocate($image, 175, 175, 175); 
$grayFour = imagecolorallocate($image, 150, 150,150); 
$grayFive = imagecolorallocate($image, 125, 125, 125); 
$graySix = imagecolorallocate($image, 100, 100, 100); 
$graySeven = imagecolorallocate($image, 75, 75, 75); 
$grayHeight = imagecolorallocate($image, 50, 50, 50); 
$grayNine = imagecolorallocate($image, 25, 25, 25); 
$black = imagecolorallocate($image, 0, 0, 0); 

// a variable to parse the array 
$a = 0; 

// a loop ImageSetPixel($image, $y, $x, $color); 

for($x = 0; $x < $size; $x++){ 
for($y = 0; $y < $size; $y++){ 

    switch($first_array[$a]){ 
     case "white" : $color = $white; 
     break; 
     case "grayOne" : $color = $grayOne; 
     break; 
     case "grayTwo" : $color = $grayTwo; 
     break; 
     case "grayThree" : $color = $grayThree; 
     break; 
     case "grayFour" : $color = $grayFour; 
     break; 
     case "grayFive" : $color = $grayFive; 
     break; 
     case "graySix" : $color = $graySix; 
     break; 
     case "graySeven" : $color = $graySeven; 
     break; 
     case "grayHeight" : $color = $grayHeight; 
     break; 
     case "grayNine" : $color = $grayNine; 
     break; 
     case "black" : $color = $black ; 
     break;   
    }  
    $a++;  
    ImageSetPixel($image, $y, $x, $color);   
    } 
} 

//set black as transparent 
ImageColorTransparent($image, $black); 

//save the picture with a number 
ImagePng($image, "../image/pictureb".$_POST['numb'].".png"); 

imagedestroy($image); 
?> 
+0

ARE YOU мало памяти при создании этого образа? У меня проблемы с памятью при создании QR-кодов с различными цветами. Возможно, попробуйте уменьшить свои цвета до двух, просто для тестирования и посмотрите, не изменилось ли это. – pokeybit

+0

Если это http://stackoverflow.com/a/430516/2311317 – pokeybit

+0

спасибо, я попробую это, и тоже для исправления. –

ответ