>  기사  >  백엔드 개발  >  PHP를 사용하여 이미지의 EXIF ​​정보를 읽는 방법에 대한 간략한 설명(코드 포함)

PHP를 사용하여 이미지의 EXIF ​​정보를 읽는 방법에 대한 간략한 설명(코드 포함)

青灯夜游
青灯夜游앞으로
2021-10-28 19:11:195109검색

PHP를 사용하여 이미지의 EXIF ​​정보를 읽는 방법은 무엇입니까? 다음 기사에서는 PHP를 사용하여 이미지 파일의 EXIF ​​정보를 얻는 방법을 소개합니다. 도움이 되길 바랍니다!

PHP를 사용하여 이미지의 EXIF ​​정보를 읽는 방법에 대한 간략한 설명(코드 포함)

우리가 촬영하는 사진과 각종 이미지 파일에는 실제로 휴대폰으로 사진을 찍을 때의 위치 정보, 사진의 종류와 크기 등 직관적으로 볼 수 없는 정보가 저장되어 있습니다. 이 정보를 EXIF ​​정보라고 합니다. 일반적으로 JPG, TIFF와 같은 이미지 파일에는 이러한 정보가 있습니다. EXIF는 실제로 이러한 종류의 디지털 사진을 위해 특별히 맞춤화되었습니다. 이는 디지털 사진의 속성 정보와 촬영 데이터를 기록하는 데 특별히 사용됩니다. 이것은 실제로 이해하기 쉽습니다. 일본은 기본적으로 카메라 산업을 독점하고 있으므로 이러한 표준은 당연히 일본에서 설정됩니다!

EXIF는 Windows 시스템에서 기본적으로 지원됩니다. 이미지를 마우스 오른쪽 버튼으로 클릭하여 메뉴를 연 다음 속성을 클릭하고 세부정보로 전환하여 이미지 파일의 EXIF ​​정보를 직접 확인하세요. 이 정보는 마음대로 편집할 수 있으므로 일부 참고용으로만 사용할 수 있으며 특정 기능 속성의 명확한 값을 얻을 수는 없습니다. 예를 들어 너비, 높이 등 EXIF에 있는 정보를 완전히 신뢰하지 마십시오.

EXIF에서 이미지 유형 정보 얻기

먼저 EXIF를 통해 이미지 유형을 살펴보겠습니다.

var_dump(exif_imagetype($png)); // int(3)
echo exif_imagetype($png) == IMAGETYPE_PNG ? $png . '是 PNG 图片' : $png . '不是 PNG 图片', PHP_EOL;
// ../img/1.png是 PNG 图片

var_dump(exif_imagetype($jpg)); // int(2)
echo exif_imagetype($jpg) == IMAGETYPE_JPEG ? $jpg . '是 jpg 图片' : $jpg . '不是 JPG 图片', PHP_EOL;
// ../img/2.jpg是 jpg 图片

exif_imagetype() 함수를 직접 사용하면 IMAGETYPE_으로 시작하는 상수 정보로 표현되는 이미지 유형인 이미지 유형의 상수가 반환됩니다. 여기에는 다른 많은 유형도 포함되어 있습니다. 여기서는 가장 일반적인 jpg 및 png 이미지 유형을 얻는 방법만 보여줍니다.

getimagesize() 함수가 반환하는 세 번째 속성, 즉 아래첨자 2가 붙은 속성과 동일합니다. getimagesize() 함수에서 0과 1은 너비와 높이를 나타내고 2는 유형을 나타냅니다. 영상.

var_dump(getimagesize($jpg));
// array(7) {
//     [0]=>
//     int(300)
//     [1]=>
//     int(244)
//     [2]=>
//     int(2)
//     [3]=>
//     string(24) "width="300" height="244""
//     ["bits"]=>
//     int(8)
//     ["channels"]=>
//     int(3)
//     ["mime"]=>
//     string(10) "image/jpeg"
//   }

전체 EXIF ​​정보 가져오기

사진의 모든 전체 EXIF ​​정보는 exif_read_data() 함수를 통해 가져옵니다.

var_dump(exif_read_data($png));
// PHP Warning:  exif_read_data(1.png): File not supported in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP获取图像文件的EXIF信息.php on line 14

// Warning: exif_read_data(1.png): File not supported in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP获取图像文件的EXIF信息.php on line 14

// bool(false)

var_dump(exif_read_data($jpg));
// array(8) {
//     ["FileName"]=>
//     string(5) "2.jpg"
//     ["FileDateTime"]=>
//     int(1605061174)
//     ["FileSize"]=>
//     int(19075)
//     ["FileType"]=>
//     int(2)
// ……
// ……

앞서 언급했듯이 EXIF ​​정보는 JPG, TIFF 및 기타 이미지 형식에만 존재하므로 PNG 이미지는 EXIF ​​정보를 얻을 수 없습니다. EXIF_read_data()가 PNG 이미지에 사용되면 경고가 발생합니다. JPG의 경우 전체 EXIF ​​콘텐츠가 반환됩니다. 여기서는 일부만 캡쳐한 것인데 너비, 높이, 종류, 압축률 등 내용이 많습니다. 휴대폰으로 찍으면 휴대폰 제조사, 지리적 위치, 물론 셔터 매개변수, 조리개 매개변수 등은 사용하는 카메라와도 관련이 있으며 일부 제조업체에서는 데이터가 더 적을 수 있습니다. 사진을 찍어 이 기능을 사용하여 직접 확인할 수 있습니다.

추가로, extract_read_data()와 유사한 기능을 가진 별칭 함수 read_exif_data()가 있습니다. 이는 별칭이며 PHP7 이후에는 사용되지 않는 구문으로 표시되었습니다. 누구나 알아낼 수 있습니다.

var_dump(read_exif_data($jpg));
// PHP Deprecated:  Function read_exif_data() is deprecated in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP获取图像文件的EXIF信息.php on line 17

// Deprecated: Function read_exif_data() is deprecated in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP获取图像文件的EXIF信息.php on line 17
// array(8) {
//   ["FileName"]=>
//   string(5) "2.jpg"
//   ["FileDateTime"]=>
//   int(1605061174)
//   ["FileSize"]=>
// ……
// ……

지정된 인덱스의 헤더 이름을 가져옵니다

인덱스 헤더는 EXIF의 필드 이름에 해당하며 현재 지원되는 모든 인덱스 헤더 정보를 볼 수 있으며 많은 내용이 있습니다. 인덱스 헤더를 기반으로 속성 이름을 얻은 다음 EXIF에서 해당 속성 정보를 검색할 수도 있습니다.

echo "256: " . exif_tagname(256) . PHP_EOL;
// 256: ImageWidth
for ($id = 1; $id <= 65535; $id++) {
    if (exif_tagname($id) != "") {
        echo $id . &#39; ( &#39; . exif_tagname($id) . &#39; )&#39;, PHP_EOL;
    }
}
// 11 ( ACDComment )
// 254 ( NewSubFile )
// 255 ( SubFile )
// 256 ( ImageWidth )
// 257 ( ImageLength )
// 258 ( BitsPerSample )
// 259 ( Compression )
// ……
// ……
// ……

JPG 파일에 포함된 썸네일 읽기

많은 사람들이 썸네일을 EXIF에 저장할 수 있다는 사실을 모르실 수도 있습니다. 그리고 모든 사람의 휴대폰으로 찍은 사진에는 기본적으로 이 썸네일이 있습니다. Windows 시스템에서는 이미지에 썸네일이 있으면 EXIF의 썸네일이 직접 사용됩니다. 그렇지 않은 경우 썸네일 데이터베이스인 디렉터리에 Thumbs.db 파일이 자동으로 생성됩니다.

var_dump(exif_thumbnail(&#39;../img/3.jpeg&#39;));

file_put_contents(&#39;../img/3-thumbnail.jpeg&#39;, exif_thumbnail(&#39;../img/3.jpeg&#39;));

PHP에서는 exif_thumbnail() 함수를 통해 EXIF에 저장된 썸네일 정보를 JPG 파일로 직접 얻을 수 있습니다. 테스트 코드에서는 이를 획득한 다음 공식 사진으로 저장하여 모든 사람이 썸네일의 실제 모습을 볼 수 있도록 합니다. 그리고 EXIF_read_data()를 사용하여 이 파일을 읽으면 썸네일에 저장된 정보도 볼 수 있습니다.

var_dump(exif_read_data(&#39;../img/3.jpeg&#39;));
// array(56) {
// ……
// ……
// ……
//     ["Make"]=>
//     string(6) "Xiaomi"
//     ["THUMBNAIL"]=>
//     array(9) {
//       ["JPEGInterchangeFormat"]=>
//       int(5504)
//       ["Orientation"]=>
//       int(6)
//       ["JPEGInterchangeFormatLength"]=>
//       int(14369)
//       ["Compression"]=>
//       int(6)
//       ["ResolutionUnit"]=>
//       int(2)
//       ["XResolution"]=>
//       string(4) "72/1"
//       ["YResolution"]=>
//       string(4) "72/1"
//       ["ExifImageLength"]=>
//       int(240)
//       ["ExifImageWidth"]=>
//       int(320)
//     }
//     ["UndefinedTag:0x9AAA"]=>
//     string(4480) "1y�L�=w%�s_�&��v��oJ��$Gdz|d�9n�
// ……
// ……

Summary

이제 사진의 EXIF에 대한 기본적인 이해가 되셨습니다. 오늘 학습할 때 주의해야 할 몇 가지 사항은 다음과 같습니다. 첫째, EXIF는 JPG 및 TIFF와 같은 이미지 형식으로만 사용할 수 있으며, 둘째, 수정이 가능하고, 셋째, 실제로 썸네일을 저장할 수 있습니다. 역시 배움은 끝이 없는 나락, 우연히 다시 눈을 떴습니다. 어서, 얘들아!

테스트 코드: https://github.com/zhangyue0503/dev-blog/blob/master/php/202011/source/11. PHP를 사용하여 이미지 파일의 EXIF ​​정보를 가져옵니다.php

권장 학습: " PHP 비디오 튜토리얼

위 내용은 PHP를 사용하여 이미지의 EXIF ​​정보를 읽는 방법에 대한 간략한 설명(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제