【问题标题】:Detecting a pixel transparency with Imagick使用 Imagick 检测像素透明度
【发布时间】:2016-02-10 06:01:22
【问题描述】:

我正在尝试计算特定图像中具有透明度的像素的百分比。为此,我试图检测像素是否具有透明度(在 PHP 上使用 Imagick)。我知道基本上有'getPixel'和'getColor'返回一个rgba数组,但是我也得到了用于jpg和非透明pngs图像的'a'的各种值......我尝试过有和没有归一化.

例如,对于这张图片,我得到了 0、1、0.1、0.9 等各种像素 的 alpha 值。

这是我正在使用的代码:

$imageIterator = $image->getPixelIterator();    
foreach ($imageIterator as $row => $pixels) {
    foreach ($pixels as $column => $pixel) { 
        $color = $pixel->getColor(true);
        echo $color['a'] . PHP_EOL;
        ...

我做错了什么?是否有其他方式获取此信息?

【问题讨论】:

  • 谢谢 - 我添加了它。
  • 那张图片不透明。
  • Danack - 我没有说它是,Imagick 声称它是......请再次阅读我的描述,如果您有任何贡献,我会很高兴。

标签: php imagemagick transparency imagick


【解决方案1】:

您可以通过以下方式检查您的版本:

php -i | grep -i -A10 magick

我的是这个:

imagick module => enabled
imagick module version => 3.3.0
imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel
Imagick compiled with ImageMagick version => ImageMagick 6.9.3-0 Q16 x86_64 2016-01-08 http://www.imagemagick.org
Imagick using ImageMagick library version => ImageMagick 6.9.3-0 Q16 x86_64 2016-01-08 http://www.imagemagick.org
ImageMagick copyright => Copyright (C) 1999-2016 ImageMagick Studio LLC
ImageMagick release date => 2016-01-08

运行此代码,我会为您的图像获取所有图像 - 即没有 Alpha 层或完全不透明的图像:

#!/usr/local/bin/php -f
<?php
$image = new Imagick("budgie.png");
$pixel_iterator = $image->getPixelIterator();
foreach($pixel_iterator as $y => $pixels)
{
   foreach($pixels as $x => $pixel)
   {
      $color = $pixel->getColor(true);
      echo $color['a'] . PHP_EOL;
   }
}
?>

同样,如果我在您的图像上运行 identify,它会显示不存在 alpha 层:

identify -verbose budgie.png | more
Image: budgie.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 296x383+0+0
  Units: Undefined
  Type: TrueColor
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit

我认为您的版本/配置有问题。

【讨论】:

  • 谢谢。我的确实更老,3.1.2。你知道我怎样才能将它更新到最新版本吗?使用“sudo apt-get install php5-imagick”告诉我我有最新版本
  • 恐怕我使用 OSX 和 homebrew 进行包管理。我认为您可能需要执行 sudo apt-get update 来更新您的软件包列表,但请先谷歌一些并检查 - 并且可能在您做太多事情之前确保您的备份是最新的。
  • 不,我已经这样做了……我会努力寻找方法。如果这确实是我的问题的解决方案,我自然会接受你的回答。非常感谢。
  • 好吧,我已经构建了与您相同的扩展版本并安装了它。什么也没有变。我也在尝试更新我的 imagemagick 库本身,因为我的版本比你的(6.9.2.8)稍旧,但有一些问题。还有其他想法吗?
猜你喜欢
  • 2011-10-08
  • 2014-08-12
  • 2015-12-07
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 2016-02-26
相关资源
最近更新 更多