【问题标题】:How to create png from array of pixel color data in PHP?如何从 PHP 中的像素颜色数据数组创建 png?
【发布时间】:2018-02-07 19:57:06
【问题描述】:

假设我有一个像素数组。基本上是每个像素的此数据 {x,y,r,g,b,a} 的数组。

我将如何将所有这些数据转换为实际的图像文件(最好是 png)?

找不到解决方案。任何帮助将不胜感激。

【问题讨论】:

  • 您需要确定一种格式并阅读有关它如何存储数据的规范。当然,找到一个这样做的图书馆会更有效率。就目前而言,这个问题不太适合本网站的问答形式,因为它是开放式和模糊的。
  • @patatahooligan 我认为如果 PHP 的标准库不包含此功能就会出现这种情况。但确实如此,所以我认为它符合格式。

标签: php image


【解决方案1】:

我承认我并没有真正使用过这个 API,但看起来 PHP 有你想要的。

您使用imagecreate 或相关函数之一创建图像标识符,然后使用imagecolorallocatealpha 创建的颜色标识符使用imagesetpixel 为每个像素着色。从那里您应该能够使用imagepng 输出为PNG。

值得注意的是,这个图像库似乎支持绘制线条和形状以及其他高于每像素级别的结构,所以我还要看看你的代码是否一定需要构建一个大像素数组,而不是绘制以其他方式显示图像。

【讨论】:

  • 谢谢,稍后会做一些测试。
  • 不错!使用imagecreatetruecolor(),您将获得最大的成功机会和最少的努力。
【解决方案2】:

我有时间编写一个小例子。您应该能够看到并注意到:

  • 红色分量向图像底部增加
  • 绿色分量向图像右侧增加
  • 蓝色成分不存在
  • Alpha 通道是随机的,介于 0(不透明)和 127(完全透明)之间

// Define width and height
$w=800;
$h=600;

// Create truecolour image so we can have infinitely many colours rather than a limited palette
$img=imagecreatetruecolor($w,$h);
imagesavealpha($img,true);
imagealphablending($img,false);

// Iterate over all pixels
for($y=0;$y<$h;$y++){
   for($x=0;$x<$w;$x++){
      $r     = round(255*$y/$h);
      $g     = round(255*$x/$w);
      $b     = 0;
      $alpha = rand(0,127);
      $color = imagecolorallocatealpha($img,$r,$g,$b,$alpha);
      imagesetpixel($img,$x,$y,$color);
   }
}

// Save result
imagepng($img,"result.png");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-01
    • 2014-03-19
    • 2021-01-17
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2014-02-25
    • 2013-09-19
    相关资源
    最近更新 更多