昨夜寝る前に、Learning Perl の Scalar Data セクションをもう一度ブラウジングしたところ、次の文に出くわしました。
文字列に任意の文字を含めることができるということは、生のバイナリ データを文字列として作成、スキャン、および操作できることを意味します。
ハードディスクに保存した画像を実際に Perl でスキャンして、Adobe という文字列が含まれているかどうかを確認できるというアイデアがすぐに浮かびました。こうすることで、どれが加工されたものか分かるようです。そこで、このアイデアを実装しようとしたところ、次のコードを思いつきました。
#!perl
use autodie;
use strict;
use warnings;
{
local $/="\n\n";
my $dir = 'f:/TestPix/';
my @pix = glob "$dir/*";
foreach my $file (@pix) {
open my $pic,'<', "$file";
while(<$pic>) {
if (/Adobe/) {
print "$file\n";
}
}
}
}
興味深いことに、このコードは実際に機能しているようで、Photoshop で加工された写真をフィルターで除外しています。しかし問題は、多くの写真が他のユーティリティによって編集されていることです。私はそこで立ち往生していると思います。デジタル画像が編集されているかどうかを判断するための単純だが普遍的な方法はありますか?
if (!= /the origianl format/) {...}
それとも、単に条件を追加する必要がありますか? お気に入り
if (/Adobe/|/ACDSee/|/some other picture editors/)
これに関するアイデアはありますか?それとも、プログラミングの知識が非常に限られているために単純化しすぎているのでしょうか?
いつもご指導ありがとうございます。