我需要Perl脚本从SMIL文件中提取JPEG。我在linux中看到的唯一方法是使用以下命令。
xxd -c1 -p wapenc\?T\=mavodi-6-13b-1f-4-7c-4806803 | tr "\n" " " | sed -n -e 's/.*\(ff d8 ff .*\)/\1/p' | xxd -r -p > image.jpeg
在System()调用中包装它不起作用。将这一系列命令合并到Perl中的正确方法是什么?
最佳答案
在对示例文件进行测试之后,我将oneliner从注释转换为适当的脚本。
脚本的主要部分是regex/(\xff\xd8\xff.*?\x{ff}\x{d9})/s
,它提取jpeg头的开始,直到(包括)jpeg标记的结束,同时仍允许其中的换行符等(\xff\xd9
修饰符):
#!perl
use strict;
use warnings;
$/ = undef;
my( $filename ) = 'wapenc_T=mavodi-6-13b-1f-4-7c-4806803';
my( $outfilename ) = "$filename-thumbnail.jpeg";
open my $fh, '<:raw', $filename
or die "Couldn't read '$filename': $!";
my $buffer;
{
local $/;
$buffer = <$fh>;
};
open my $output, '>:raw', $outfilename
or die "Couldn't write to '$outfilename': $!";
if( $buffer =~ /(\xff\xd8\xff.*?\x{ff}\x{d9})/s ) {;
print $output $1
};