먼저 이미지의 Exif 정보가 무엇인지 알아보겠습니다
Exif는 이미지 파일 형식이며 데이터 저장 방식은 JPEG 형식과 완전히 동일합니다. 실제로 Exif 형식은 JPEG 형식의 헤더에 조리개, 셔터, 화이트 밸런스, ISO, 초점 거리, 날짜 및 시간 등 다양한 촬영 조건은 물론 카메라 브랜드, 모델, 색상 코딩 등 디지털 사진 정보를 삽입합니다. , 녹음된 사운드는 물론 GPS(Global Positioning System), 썸네일 등을 촬영합니다. 간단히 말하면 Exif=JPEG 촬영 매개변수입니다. 따라서 JPEG 파일을 볼 수 있는 모든 이미지 보기 소프트웨어를 사용하여 Exif 형식의 사진을 볼 수 있지만 모든 그래픽 프로그램이 Exif 정보를 처리할 수 있는 것은 아닙니다.
위 내용은 바이두백과사전에서 인용하였습니다.
사진의 EXIF 정보를 읽는 것이 꼭 필요한 경우는 아니지만, 사진 기술을 논의하는 일부 사이트에 비하면 사진 포럼 Hummingbird와 같이 사진의 EXIF 정보를 읽는 것이 특히 중요합니다.
허밍버드 포럼 스크린샷, 빨간색 원 정보는 프로그램에서 읽어온 사진의 EXIF 정보입니다. 이미지를 로컬로 다운로드하고 Light and Shadow Magic을 사용하여 이미지를 열어 Exif 정보를 확인합니다. 물론 Light and Shadow 외에도 이미지의 Exif 값을 확인할 수 있는 도구가 많이 있습니다.
Exif 정보에서 읽을 수 없는 렌즈 값을 제외하고 다른 모든 값은 올바르게 읽을 수 있습니다.
PHP 모듈 활성화
기본적으로 이미지 Exif 정보를 읽는 PHP 모듈은 활성화되어 있지 않습니다. 먼저 이 모듈을 활성화해야 합니다.
Exif 모듈을 열려면 mbstring 지원이 필요하므로 먼저 mbstring을 설치하십시오. 다음은 Linux 환경을 예로 들어 설명합니다.
mbstring 모듈 설치
먼저 PHP 소스 코드 패키지의 위치를 찾아 ext/mbstring으로 직접 이동한 후 다음 명령을 실행하여 설치합니다.
[root@lee ext]# cd /data0/software/php/ext/mbstring
[root@lee mbstring]# /usr/local/webserver/php/bin/phpize
구성:
PHP API 버전: 20090626
Zend 모듈 API 번호: 20090626
Zend 확장 API 번호: 220090626
[root@lee EXIF]# ./configure --with-php-config=/usr/local/webserver/php/bin/php-config
[root@lee mbstring]# make && make install
공유 확장 설치: /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/
헤더 파일 설치: /usr/local/webserver/php/include/php/
[root@leembstring]#
설치 후 확장 디렉터리에 들어가 모듈이 있는지 확인할 수 있습니다. 모듈이 있으면 설치가 성공한 것입니다.
[root@lee mbstring]# cd /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/
[root@lee no-debug-non-zts-20090626]# ll
총 사용량 1880
-rwxr-xr-x.1 루트 루트 414405 2012년 6월 12일 eaccelerator.so
-rwxr-xr-x.1 루트 루트 1091242 2011년 9월 23일 imagick.so
-rwxr-xr-x.1 루트 루트 5285 2월 20일 15:07 mbstring.so
-rwxr-xr-x.1 루트 루트 246752 2011년 9월 23일 memcache.so
-rwxr-xr-x.1 루트 루트 154252 2011년 9월 23일 pdo_mysql.so
Exif 모듈 설치
mbstring 모듈을 설치하는 것과 유사하게 먼저 소스 코드 위치를 찾아 여기에 CD를 넣고 설치를 구성합니다. 특정 매개변수는 사용자 환경에 따라 다릅니다.
[root@lee EXIF]# cd /data0/software/php-5.3.13/ext/exif
[root@lee EXIF]# ./configure --with-php-config=/usr/local/webserver/php/bin/php-config
[root@lee EXIF]# make && make install
공유 확장 설치: /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/
[root@lee EXIF]#
확장 프로그램 디렉터리에 들어가 설치 성공 여부를 확인하세요
[root@lee EXIF]# cd /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/
[root@lee no-debug-non-zts-20090626]# ll
총 사용량 2036
-rwxr-xr-x.1 루트 루트 414405 2012년 6월 12일 eaccelerator.so
-rwxr-xr-x.1 루트 루트 158554 2월 20일 15:25 EXIF.so
-rwxr-xr-x.1 루트 루트 1091242 2011년 9월 23일 imagick.so
-rwxr-xr-x.1 루트 루트 5285 2월 20일 15:07 mbstring.so
-rwxr-xr-x.1 루트 루트 246752 2011년 9월 23일 memcache.so
-rwxr-xr-x.1 루트 루트 154252 2011년 9월 23일 pdo_mysql.so
[root@lee no-debug-non-zts-20090626]#
exif.so 모듈이 이미 존재합니다.
php.ini에 모듈 추가
php.ini를 열고 다음 두 줄을 추가하세요
extension = "mbstring.so"
확장자 = "exif.so"
그리고 Extension_dir 값이 모듈을 설치할 때 표시되는 공유 확장 설치 값과 일치하는지 확인하세요. 예를 들어, 모듈을 설치할 때 표시되는 내 확장의 위치는
입니다.
/usr/local/webserver/php/lib/php/extensions /no-debug -non-zts-20090626/
그런 다음 php.ini의 Extension_dir이 올바른 디렉토리를 가리켜야 합니다.
extension_dir="/usr/local/webserver/php/lib/php /extensions/ no-debug-non-zts-20090626/"
php.ini를 저장하고 웹서버를 다시 시작하세요.
phpinfo()를 열고 해당 속성을 찾아 제대로 작동하는지 확인하세요.
일반적으로 다음 두 가지 모듈 정보가 표시됩니다
이미지의 EXIF 정보를 읽으려면 EXIF_read_data()를 사용하세요
exif 정보 읽기를 지원하는 이미지 유형은 phpinfo에 명시되어 있습니다. jpeg 또는 tiff 유형만 가능하며 일반적인 유형이면 충분합니다.
EXIF_read_data() 함수의 사용설명서를 살펴보겠습니다
배열 exif_read_data ( 문자열 $filename [, 문자열 $sections = NULL [, bool $arrays = false [, bool $thumbnail = false ]]] )
매개변수:
파일 이름: 이미지 EXIF 정보를 읽을 이미지 경로입니다.
섹션: 결과 배열을 생성하기 위해 파일에 존재해야 하는 섹션의 쉼표로 구분된 목록입니다. 요청한 섹션을 찾을 수 없는 경우 반환 값은 FALSE입니다.
파일 |
파일 이름, 파일 크기, FileDateTime, 섹션 발견 |
계산됨 |
html, Width, Height, IsColor 등이 있을 수 있습니다. 높이와 너비는 getimagesize()
FILE |
FileName, FileSize, FileDateTime, SectionsFound |
COMPUTED |
html,Width,Height,IsColor,可能有更多其它的。Height 和 Width 是用和 getimagesize() 一样的方法计算的,因此它们的值不能是任何返回的头信息的部分。此外 html 是一个 height/width 的文本字符串可以用于普通的HTML 中。 |
ANY_TAG |
任何包含有标记的信息,例如 IFD0,EXIF,... |
IFD0 |
所有 IFD0 的标记数据。在标准的图像文件中这包含了图像大小及其它。 |
THUMBNAIL |
如果有第二个 IFD,文件应该包含有缩略图。所有有关嵌入缩略图的标记信息都存储在本区。 |
COMMENT |
JPEG 图像的注释头信息。 |
EXIF |
EXIF 区段是 IFDO 的子区,包含有图像的更多详细信息。大多数内容都是数码相机相关的。 |
와 동일한 방법을 사용하여 계산됩니다. 해당 값은 반환된 헤더 정보의 일부가 될 수 없습니다. 또한 html은 일반적인 HTML에서 사용할 수 있는 높이/너비 텍스트 문자열입니다. |
ANY_TAG |
IFD0, EXIF 등과 같은 태그가 포함된 모든 정보... |
IFD0 |
IFD0의 모든 태그 데이터입니다. 표준 이미지 파일에는 이미지 크기 등이 포함됩니다. |
썸네일 |
두 번째 IFD가 있는 경우 파일에는 미리보기 이미지가 포함되어야 합니다. 포함된 축소판에 대한 모든 마크업 정보는 이 영역에 저장됩니다. |
댓글 |
JPEG 이미지에 대한 주석 헤더 정보입니다. |
EXIF |
EXIF 섹션은 IFDO의 하위 섹션으로, 이미지에 대한 더 자세한 정보를 포함합니다. 대부분의 콘텐츠는 디지털 카메라와 관련되어 있습니다. |
arrays: 각 섹션이 배열이 될지 여부를 지정합니다. 섹션 COMPUTED, THUMBNAIL 및 COMMENT 섹션은 다른 섹션과 충돌하는 이름을 포함하기 때문에 항상 배열이 됩니다.
thumbnail: TRUE로 설정하면 썸네일 자체를 읽습니다. 그렇지 않으면 태그 데이터만 읽혀집니다.
사진의 EXIF 정보를 읽어보자
$exif = getExif('a.jpg');
echo '
';<br>
print_r($exif);<br>
echo '
';
실행 결과:
배열
(
[파일명] => a.jpg
[파일날짜시간] => 1361340032
[파일 크기] => 69170
[파일 형식] => 2
[MimeType] => 이미지/jpeg
[SectionsFound] => ANY_TAG, IFD0, THUMBNAIL, EXIF, GPS, INTEROP
[계산됨] => 배열
(
[html] => width="600" height="397"
[신장] => 397
[너비] => 600
[IsColor] => 1
[ByteOrderMotorola] => 1
[조리개F번호] => f/13.0
[초점거리] => 3.76m
[사용자 설명] =>
[UserCommentEncoding] => ASCII
[저작권] =>
[Thumbnail.FileType] => 2
[Thumbnail.MimeType] => 이미지/jpeg
)
[이미지 너비] => 4928
[이미지 길이] => 3264
[BitsPerSample] => 배열
(
[0] => 8
[1] => 8
[2] => 8
)
[광도계 해석] => 2
[만들기] => 니콘주식회사
[모델] => 니콘 D7000
[방향] => 1
[SamplesPerPixel] => 3
[X해상도] => 3000000/10000
[Y해상도] => 3000000/10000
[해상도단위] => 2
[소프트웨어] => 어도비 포토샵 CS5 윈도우
[날짜시간] => 2013:02:18 20:50:46
[화이트포인트] => 배열
(
[0] => 313/1000
[1] => 329/1000
)
[PrimaryChromaticities] => 배열
(
[0] => 64/100
[1] => 33/100
[2] => 21/100
[3] => 71/100
[4] => 15/100
[5] => 6/100
)
[YCbCr계수] => 배열
(
[0] => 299/1000
[1] => 587/1000
[2] => 114/1000
)
[YCbCrPositioning] => 2
[저작권] =>
[Exif_IFD_Pointer] => 500
[GPS_IFD_Pointer] => 1248
[썸네일] => 배열
(
[압축] => 6
[X해상도] => 72/1
[Y해상도] => 72/1
[해상도단위] => 2
[JPEGInterchangeFormat] => 1362
[JPEGInterchangeFormatLength] => 4784
)
[노출시간] => 40/10
[F번호] => 130/10
[노출 프로그램] => 1
[ISOSpeedRatings] => 1000
[정의되지 않은태그:0x8830] => 2
[Exif버전] => 0230
[DateTimeOriginal] => 2013:02:14 21:12:08
[DateTimeDigitized] => 2013:02:14 21:12:08
[구성 요소 구성] =>
[CompressedBitsPerPixel] => 4/1
[ShutterSpeedValue] => -2/1
[조리개 값] => 7400879/1000000
[노출바이어스값] => 2/6
[MaxApertureValue] => 10월 36일
[피사체거리] => 376/100
[측광모드] => 3
[광원] => 0
[플래시] => 16
[초점 길이] => 180/10
[사용자 설명] => ASCII
[SubSecTime] => 10
[SubSecTimeOriginal] => 10
[SubSecTimeDigitized] => 10
[FlashPixVersion] => 0100
[색공간] => 65535
[ExifImageWidth] => 600
[ExifImageLength] => 397
[InteroperabilityOffset] => 1216
[감지방법] => 2
[파일소스] =>
[장면 유형] =>
[CFAP패턴] =>
[CustomRendered] => 0
[노출모드] => 1
[화이트밸런스] => 0
[디지털줌비율] => 1/1
[FocalLengthIn35mmFilm] => 27
[SceneCaptureType] => 0
[게인컨트롤] => 2
[대비] => 0
[채도] => 0
[선명도] => 0
[피사체거리범위] => 0
[정의되지 않은태그:0xA500] => 22/10
[GPS버전] =>
[InterOperabilityIndex] => R03
[InterOperabilityVersion] => 0100
)
如果提示:
치명적인 오류: 2번째 줄의 /data0/htdocs/www/exif/index.php에서 정의되지 않은 함수 EXIF_read_data() 호출
则表示模块没有打开,可能是你配置哪一块没有配置好, 重新配置就好。
Exif信息读取结果中取는유용한信息
더 나은 여행을 위해 Exif 사진을 다운로드하고 더 많은 정보를 얻으세요.提写一个PHP函数。常用 参数包括快门,器材name称,光圈,感光島,焦距:
/**
* JPEG 이미지의 Exif 정보 읽기
* $img는 이미지 경로입니다
*
* 충타이 블로그
*/
함수 getExif($img){
$exif = exif_read_data($img, 'IFD0');
배열 반환(
'파일 이름' => $exif['파일 이름'],
'장비 브랜드' => $exif['Make'],
'장비' => $exif['모델'],
'셔터' => $exif['ExposureTime'],
'조리개' => $exif['FNumber'],
'초점 거리' => $exif['FocalLength'],
'민감도' => $exif['ISOSpeedRatings']
);
}
사진 읽기
$exifInfo = getExif('a.jpg');
echo '
';<br>
print_r($exifInfo);<br>
echo '
';
실행 결과:
배열
(
[파일명] =>25556306.jpg
[장비 브랜드] => NIKON CORPORATION
[장비] => NIKON D3100
[셔터] => 10/32000
[조리개] => 18/10
[초점거리] => 350/10
[감도] => 100
)
기타 안내
사진의 Exif 값은 해당 도구를 통해 수정될 수 있으므로, 프로그램을 사용하여 사진의 Exif 값을 읽는 것은 참고용일 뿐 실제 근거로 사용할 수는 없습니다.
관심 있는 친구는 웹사이트를 방문하여 온라인으로 Exif 정보를 읽을 수도 있습니다. http://exif.cn즐거운 시간 보내세요
PHP 모듈을 통해 읽은 Exif 정보가 때때로 잘못되거나 정보가 불완전한 경우 타사 도구를 사용할 수 있습니다. 그런 다음 php를 사용하여 시스템 linux 명령을 실행하여
을 읽습니다.