无法识别用于图像处理的 png 文件

Posted

技术标签:

【中文标题】无法识别用于图像处理的 png 文件【英文标题】:Not recognizing png files for image processing 【发布时间】:2019-08-27 15:37:52 【问题描述】:

我正在尝试将 png 分辨率添加到我们的图像处理代码中。我收到以下错误,我不知道如何解决。

[Tue Aug 27 15:32:03.968126 2019] [cgi:error] [pid 3206] [client] AH01215: Can't call method "getBounds" on an undefined value

这是我的代码。

my $file = "$datapath/$rs->'path'";
my ($ext) = $file =~ /(\.[^.]+)$/;
if ($ext eq "jpg")
 my $src=GD::Image->newFromJpeg("$datapath/$rs->'path'",1);
 else 
 my $src=GD::Image->newFromPng("$datapath/$rs->'path'",1);

my ($w,$h)=$src->getBounds();

当我有这个只是 jpg 的代码时,它可以工作:

my $file = "$datapath/$rs->'path'";
my ($ext) = $file =~ /(\.[^.]+)$/;
my $src=GD::Image->newFromJpeg("$datapath/$rs->'path'",1);
my ($w,$h)=$src->getBounds();

更新

现在jpegs 没有显示。

my $file = "$datapath/$rs->'path'";
my ($ext) = $file =~ /(\.[^.]+)$/;
my $src;
if ($ext eq "jpg")
   $src=GD::Image->newFromJpeg("$datapath/$rs->'path'",1);
 else 
   $src=GD::Image->newFromPng("$datapath/$rs->'path'",1);

my $img=GD::Image->new($ow,$oh,1);
$img->copyResampled($src,$x,$y,0,0,$nw,$nh,$w,$h);
$img->edgeImageSharpen(9);
$img->edgeBrightnessContrast(8,1.1);
if($ext eq "jpg")
  my $jpg=$img->jpeg(90);
  print "Content-Type: image/jpeg\n";
  print "Content-Length: ".length($jpg)."\n\n";
  print $jpg;
 else 
  my $png=$img->png;
  print "Content-Type: image/png\n";
  print "Content-Length: ".length($png)."\n\n";
  print $png;

【问题讨论】:

我改成my ($basename,$parentdir,$ext) = fileparse($file, qr/\.[^.]*$/);还是不行 【参考方案1】:

检查返回给 $ext 的值。

根据您的代码:

my $file = "image_file.jpg";
my ($ext) = $file =~ /(\.[^.]+)$/;
say $ext; 

这将打印“.jpg”,这就是为什么没有条件的代码可以工作,因为条件会失败,因为它是“jpg”而不是“.jpg”

【讨论】:

是的,我想通了 还有问题吗? 不,我在你之前几个小时调试过它:)

以上是关于无法识别用于图像处理的 png 文件的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Android 应用程序无法识别 drawables 目录的子目录中的 PNG? [复制]

Tesseract 无法识别随机英文字符序列

为啥 pytesseract 无法识别背景较暗的图像中的数字?

GraphicsMagick 无法识别 PDF 的背景透明度

Windows 文件 PathTooLongException:用于识别文件路径长于 255 的批处理文件

Tkinter 错误:无法识别图像文件中的数据