문제

나는 현재 사용하여 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

네 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;

내가 알고있는 다른 방법으로 추출하 EXIF 이미지 파일에서 데이터를 펄에서 그러나 때문에 우리는 이미 펄 마법 모듈을 로드하고 싶지 않을 낭비하고 더 많은 메모리함으로써을 로드하는 추가적인 모듈입니다.바라고 있어요 누군가 밖에 이미에 이 일을 그들의 사이트와 공유할 수 있는 솔루션입니다.사전에 감사합니다 당신의 도움에 대한!

도움이 되었습니까?

해결책

> 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
...

는 작동하는 것 같다.

버ImageMagick6.3.7 06/04/09Q16 http://www.imagemagick.org

다른 팁

나는 당신이 사용하여 필 Harvey's 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