图像数据无效

时间:2014-05-15 17:53:37

标签: image perl imagemagick

我有一个我能弄明白的复杂问题。有点历史...我曾经使用Bit.ly来生成qr代码。他们倒下了所以我去谷歌可靠性。

我使用Quark来处理代码,但我需要在它们进行夸克之前对它们进行配置。使用Bitly,qr代码生成percfecty。然而,当谷歌生成它们时,它们处于RGB状态,在灰度处生成一些完美的灰度。我正在使用perl的ImageMagick库在下载之前对图像进行必要的编辑。

到目前为止,这就是我所拥有的...... Google会为我下载的qr代码生成一个链接。因为它是RGB格式,我需要灰度或位图,因此它将与夸克(有效)兼容。

sub ConvertToGrayscale {

my ($imagePath) = @_;
my $OutPath = $imagePath; # $OutPath =~ s/png$/jpg/i;

my $image = Image::Magick->new() or die 'Unable to create new Image Object.';
my $imageReadError = '';
my $imageWriteError = '';

$imageReadError = $image->Read($imagePath); # returns a code if there is an error

if ($imageReadError) {
     warn "Error: $imageReadError.  Unable to read image path: $imagePath";
} else {
    # $image->Scale(geometry => '75');
    # $image->Set('png:color-type' => 'Grayscale', 'png:bit-depth' => '8');
    # $image->Set(colorspace => 'Gray', magick => 'JPEG', quality => '100');
    $imageWriteError = $image->Write($OutPath);
}

if ($imageWriteError) { warn "Error: $imageWriteError.  Unable to write image file:     $OutPath"; }

}

现在复杂的问题是我只是使用Set函数在图像上设置一些属性,例如colorspace =>灰度,它将图像模式转换为灰度,但当我将它加载到夸克时,它是巨大的,我无法将它缩小到足以使用。因此,这个解决方案的一个很好的候选人是可能有两种软件经验的人。

在旁注上可能会有所帮助。如果我将图像加载到photoshop中,我可以将图像转换为灰度图像,一切都很完美。因此,似乎我希望我的perl脚本能够模拟Photoshop对图像的作用。

2 个答案:

答案 0 :(得分:0)

此刻我真的无法测试它,但我的第一个猜测是'Scale'使得整个图像比原始图像大约五倍半,大75倍。我不确定你为什么要用ImageMagick来缩放它,主要是接收应用程序能够在打印时缩放到所需的输出。

希望这会有所帮助,如果没有,我会在明天早上检查

答案 1 :(得分:0)

不要依赖外部服务来创建QR码。这是一个相对简单的目标,正如您在Bit.ly中所经历的那样,有时服务会消失。

相反,我建议使用此问题中演示的cpan模块:how to make QR codes in perl cgi。它推荐的模块远不是cpan上唯一可用的模块,所以我建议您花一些时间尝试一些,直到找到你喜欢的模块。