どのように私はPerlMagickを使用してEXIFデータを抽出することができますか?

StackOverflow https://stackoverflow.com/questions/1708417

  •  19-09-2019
  •  | 
  •  

質問

私は現在使用しているPerlの魔術 http://www.imagemagick.org/script /perl-magick.php に、画像へのPerlインターフェース魔術 http://www.imagemagick.org 、私たちのサイトのユーザーがアップロードした写真を加工&変換します。私はまた、これらの画像に添付EXIFデータの一部をキャプチャできるようにしたいのですが、私は、次のコマンドを使用して画像の魔術へのコマンドラインインターフェイスを使用してこれを行う方法を見つけ出すことができました。

/usr/bin/identify -format "%[EXIF:*]" image.jpg

特定の写真を以下のEXIF情報を返します

exif:ApertureValue=29/8
exif:ColorSpace=1
exif:CompressedBitsPerPixel=3/1
exif:CustomRendered=0
exif:DateTime=2002:10:08 19:49:52
exif:DateTimeDigitized=2002:09:29 14:03:55
exif:DateTimeOriginal=2002:09:29 14:03:55
exif:DigitalZoomRatio=1/1
exif:ExifImageLength=307
exif:ExifImageWidth=410
exif:ExifOffset=192
exif:ExifVersion=48, 50, 50, 48
exif:ExposureBiasValue=0/1
exif:ExposureMode=0
exif:ExposureTime=1/1000
exif:Flash=24
exif:FlashPixVersion=48, 49, 48, 48
exif:FNumber=7/2
exif:FocalLength=227/32
exif:FocalPlaneResolutionUnit=2
exif:FocalPlaneXResolution=235741/32
exif:FocalPlaneYResolution=286622/39
exif:Make=Canon
exif:MaxApertureValue=12742/4289
exif:MeteringMode=5
exif:Model=Canon PowerShot S30
exif:ResolutionUnit=2
exif:SceneCaptureType=0
exif:SensingMethod=2
exif:ShutterSpeedValue=319/32
exif:Software=Adobe Photoshop 7.0
exif:WhiteBalance=0
exif:XResolution=180/1
exif:YResolution=180/1

私はPerlの魔術から、これと同じ結果を得るために、約100の方法を試してみたが、私はそれを正しく動作させるために、コマンドラインで使用している同じパラメータを渡す方法を見つけ出すことはできません。ここで働いているようだいずれも私が試したのバリエーションのカップルがあります:

use Image::Magick;
my $image = Image::Magick->new;
my $exif = $image->Identify('image.jpg');
print $exif;

$image->Read('image.jpg');
$exif = $image->Get('format "%[EXIF:*]"');
print $exif;

私はPerlでの画像ファイルからEXIFデータを抽出するための他の方法がある知っているが、我々はすでにPerlの魔術モジュールがロードされているので、私は、追加のモジュールをロードすることにより、任意のより多くのメモリを無駄にしたくありません。私はすでに自分のサイトでこの作業を持っているし、解決策を共有することができますそこに誰かを望んでいます。あなたの助けを事前に感謝!

役に立ちましたか?

解決

> cat im.pl
use Image::Magick;
my $image = Image::Magick->new();
$image->Read('/home/rjp/2009-02-18/DSC00343.JPG');
my $a = $image->Get('format', '%[EXIF:*]'); # two arguments
my @exif = split(/[\r\n]/, $a);
print join("\n", @exif);
> perl im.pl
exif:ColorSpace=1
exif:ComponentsConfiguration=...
exif:Compression=6
exif:CustomRendered=0
exif:DateTime=2009:02:13 16:18:15
exif:DateTimeDigitized=2009:02:13 16:18:15
...

これは動作するようです。

バージョン:6.3.7のImageMagick 06/04/09 Q16 http://www.imagemagick.orgする

他のヒント

私は強くあなたがフィル・ハーヴェイの ExifTool して使用することをお勧めします。これは、包括的かつ十分に文書です。また、メモリにイメージ全体を読んでいない、とマニュアルに従って、あなただけ開いている画像ファイルにそれをファイルハンドルを渡すことによって、画像からExif情報を取得することができます。だから、多くのメモリを無駄にしてはいけません。

編集の@rjpは、個々のタグではなく、すべての情報にアクセスする方法を示しました。ここでハッシュにデータを配置する方法です。

#!/usr/bin/perl

use strict;
use warnings;

use Image::Magick;

my $image = Image::Magick->new;
$image->read('test.jpg');

my %exif = map { s/\s+\z//; $_ }
           map { split /=/, $_  }
           split /exif:/, $image->Get('format', '%[EXIF:*]');

use Data::Dumper;
print Dumper \%exif;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top