regex - 无需库即可从 PNG 获取图像宽度和高度

标签 regex image perl png

基于 PNG(可移植网络图形)文件的规范,一个非常 first chunk 必须是 IHDR(4 字节),包含图像的宽度、高度和位深度。因此,IHDR 后面是代表图像宽度的 4 个字节,接下来的 4 个字节代表图像的高度

使用正则表达式 /IHDR(.{4})(.{4})/s 并转换 $1$2 是否安全> 转换为宽度高度?如果是这样,我该如何进行这样的转换?我应该使用 unpack("N", $x) 还是 unpack("V", $x) ..?


我当前的代码(不确定它是否适用于大图像):

if ($png =~ m/^\x89PNG\x0D\x0A\x1A\x0A....IHDR(.{4})(.{4})/s) {
  ($width, $height) = (unpack("N", $1) , unpack("N", $2));  
}

最佳答案

我刚刚查了一下png规范; 《国际人类发展报告》面前还有更多的事情要做。所以这应该有效:

open(IN, "<xx.png");
binmode(IN);
read(IN, $header, 24);
if (substr($header, 12, 4) ne "IHDR") {
    die "this is not a PNG file";
}
($width, $height)=unpack("NN", substr($header, 16));
print "width: $width height: $height\n";
close IN;

关于regex - 无需库即可从 PNG 获取图像宽度和高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20528928/

相关文章:

regex - 用 ascii 连字符 "-"替换所有连字符类型

php - 将 Img 源与 php 变量一起使用?

image - 检测谷歌地图街景静态图片的 "we have no imagery"

image - 快速将图像添加到 UIAlertController

Java RegEx - 如何防止一行特殊字符被另一个字符替换?

javascript - 注册。 exp.在javascript中获取子字符串中的最后一个<a>标签

mysql - 如何获取除括号中的所有匹配词?正则表达式/Mysql

linux - 如何在 Perl 的 system() 中使用 shell 的进程替换?

perl - 使用Perl将2天添加到今天

Perl 脚本不在 google chrome 上保存 cookie?