@@ -51,6 +51,10 @@ PHPAPI const char php_sig_iff[4] = {'F','O','R','M'};
51
51
PHPAPI const char php_sig_ico [4 ] = {(char )0x00 , (char )0x00 , (char )0x01 , (char )0x00 };
52
52
PHPAPI const char php_sig_riff [4 ] = {'R' , 'I' , 'F' , 'F' };
53
53
PHPAPI const char php_sig_webp [4 ] = {'W' , 'E' , 'B' , 'P' };
54
+ PHPAPI const char php_sig_ftyp [4 ] = {'f' , 't' , 'y' , 'p' };
55
+ PHPAPI const char php_sig_mif1 [4 ] = {'m' , 'i' , 'f' , '1' };
56
+ PHPAPI const char php_sig_heic [4 ] = {'h' , 'e' , 'i' , 'c' };
57
+ PHPAPI const char php_sig_heix [4 ] = {'h' , 'e' , 'i' , 'x' };
54
58
55
59
/* REMEMBER TO ADD MIME-TYPE TO FUNCTION php_image_type_to_mime_type */
56
60
/* PCX must check first 64bytes and byte 0=0x0a and byte2 < 0x06 */
@@ -1254,6 +1258,8 @@ PHPAPI char * php_image_type_to_mime_type(int image_type)
1254
1258
return "image/webp" ;
1255
1259
case IMAGE_FILETYPE_AVIF :
1256
1260
return "image/avif" ;
1261
+ case IMAGE_FILETYPE_HEIF :
1262
+ return "image/heif" ;
1257
1263
default :
1258
1264
case IMAGE_FILETYPE_UNKNOWN :
1259
1265
return "application/octet-stream" ; /* suppose binary format */
@@ -1339,6 +1345,10 @@ PHP_FUNCTION(image_type_to_extension)
1339
1345
case IMAGE_FILETYPE_AVIF :
1340
1346
imgext = ".avif" ;
1341
1347
break ;
1348
+ case IMAGE_FILETYPE_HEIF :
1349
+ imgext = ".heif" ;
1350
+ break ;
1351
+ break ;
1342
1352
}
1343
1353
1344
1354
if (imgext ) {
@@ -1423,6 +1433,11 @@ PHPAPI int php_getimagetype(php_stream *stream, const char *input, char *filetyp
1423
1433
return IMAGE_FILETYPE_JP2 ;
1424
1434
}
1425
1435
1436
+ if (twelve_bytes_read && !memcmp (filetype + 4 , php_sig_ftyp , 4 ) &&
1437
+ (!memcmp (filetype + 8 , php_sig_mif1 , 4 ) || !memcmp (filetype + 8 , php_sig_heic , 4 ) || !memcmp (filetype + 8 , php_sig_heix , 4 ))) {
1438
+ return IMAGE_FILETYPE_HEIF ;
1439
+ }
1440
+
1426
1441
if (!php_stream_rewind (stream ) && php_is_image_avif (stream )) {
1427
1442
return IMAGE_FILETYPE_AVIF ;
1428
1443
}
@@ -1515,6 +1530,11 @@ static void php_getimagesize_from_stream(php_stream *stream, char *input, zval *
1515
1530
case IMAGE_FILETYPE_AVIF :
1516
1531
result = php_handle_avif (stream );
1517
1532
break ;
1533
+ case IMAGE_FILETYPE_HEIF :
1534
+ if (!php_stream_rewind (stream )) {
1535
+ result = php_handle_avif (stream );
1536
+ }
1537
+ break ;
1518
1538
default :
1519
1539
case IMAGE_FILETYPE_UNKNOWN :
1520
1540
break ;
0 commit comments