首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像::PNG::libpng:"libpng错误:调用空写函数“

图像::PNG::libpng:"libpng错误:调用空写函数“
EN

Stack Overflow用户
提问于 2017-06-15 11:48:27
回答 1查看 362关注 0票数 0

我有一些代码应该用libpng的Perl绑定来修改PNG文件的tEXt或zTXt块。

代码:

代码语言:javascript
复制
use strict;
use warnings;
use Data::Dumper qw(Dumper);
use Image::PNG::Libpng qw(read_png_file write_png_file) ;


my $lpng = read_png_file ("testimg.png");

my @cmdAr = ();
for(my $i=0; $i<10; ++$i){
  push(@cmdAr, {compression => Image::PNG::Libpng::PNG_TEXT_COMPRESSION_zTXt ,
                key => sprintf("par_%02i",$i),
                text => sprintf("%06i", $i*$i)
               }
      );
}
print STDERR Dumper(\@cmdAr);
$lpng->set_text (\@cmdAr);
$lpng->write_png_file ("testimg2.png");

但是,代码在写函数中失败:

libpng错误:调用空写函数

有什么关于如何解决这个问题的提示吗?文件存在,进程也具有写访问权限。

我的Perl版本(最新的草莓Perl):

这是perl 5,version 26,subversion 0 (v5.26.0),它是为MSWin32-x86-多线程-64int构建的。

libpng模块的版本:

-D图片::PNG::Libpng

代码语言:javascript
复制
CPAN: CPAN::SQLite loaded ok (v0.211)
Database was generated on Thu, 15 Jun 2017 10:43:51 GMT

Image::PNG::Libpng
-------------------------------------------------------------------------
    CPAN: Module::CoreList loaded ok (v5.20170530)
(no description)
    B/BK/BKB/Image-PNG-Libpng-0.43.tar.gz
    C:\strawberry-perl\perl\site\lib\Image\PNG\Libpng.pm
    Installed: 0.43
    CPAN:      0.43  up to date
    Ben Bullock (BKB)
    bkb@cpan.org
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-16 10:14:54

该模块的作者向我介绍了以下函数文档:file,它说:

$png必须是由"create_write_struct“创建的对象,因此"read_png_file”后面的调用不起作用。

$png->copy_png可用于创建write-able结构。

因此,在调用$lpng = $lpng->copy_png();之前插入set_text会产生预期的行为。

完整(并清理)代码,以供参考:

代码语言:javascript
复制
use strict;
use warnings;
use Image::PNG::Libpng qw(read_png_file write_png_file) ;



my @txts = ({compression => Image::PNG::Libpng::PNG_TEXT_COMPRESSION_zTXt,
             key          => "myImportentTextData",
             text         => "fooBar"
            });

my $png = read_png_file ("testimg.png");

$png = $png->copy_png();  #< this is important!

$png->set_text (\@txts);
$png->write_png_file ("testimg2.png");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44566732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档