PHP GD库如何使用imagesetpixel从颜色数组生成矩阵

3
我希望使用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);
?>

生成这张图片时,你的内存是否不足?我在创建带有不同颜色的QR码时遇到了内存问题。也许可以尝试将颜色减少到两种,仅供测试,看看是否会有所改善。 - pokeybit
如果是这样 https://dev59.com/A3RC5IYBdhLWcg3wFNDX#430516 - pokeybit
谢谢,我会尝试这个方法,并且也感谢您的纠正。 - Jérémie Rousseau
最后,我认为将内存限制 memory_limit 设置为128M 对于 juqt 20px/20px 是不错的选择。 - Jérémie Rousseau
如果x = 0且y = 0,那对我来说行不通,但是第0行和第0列是空的。 - Jérémie Rousseau
请为我工作。http://forums.devshed.com/php-development-5/create-image-2d-rgb-array-930255-2.html - Jérémie Rousseau
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接