>백엔드 개발 >PHP 튜토리얼 >PHP_php 팁에서 사진 EXIF ​​정보를 읽는 방법

PHP_php 팁에서 사진 EXIF ​​정보를 읽는 방법

WBOY
WBOY원래의
2016-05-16 20:38:021334검색

먼저 이미지의 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 명령을 실행하여

을 읽습니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.