@@ -51,6 +51,10 @@ PHPAPI const char php_sig_iff[4] = {'F','O','R','M'};
5151PHPAPI  const  char  php_sig_ico [4 ] =  {(char )0x00 , (char )0x00 , (char )0x01 , (char )0x00 };
5252PHPAPI  const  char  php_sig_riff [4 ] =  {'R' , 'I' , 'F' , 'F' };
5353PHPAPI  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' };
5458
5559/* REMEMBER TO ADD MIME-TYPE TO FUNCTION php_image_type_to_mime_type */ 
5660/* 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)
12541258			return  "image/webp" ;
12551259		case  IMAGE_FILETYPE_AVIF :
12561260			return  "image/avif" ;
1261+ 		case  IMAGE_FILETYPE_HEIF :
1262+ 			return  "image/heif" ;
12571263		default :
12581264		case  IMAGE_FILETYPE_UNKNOWN :
12591265			return  "application/octet-stream" ; /* suppose binary format */ 
@@ -1339,6 +1345,10 @@ PHP_FUNCTION(image_type_to_extension)
13391345		case  IMAGE_FILETYPE_AVIF :
13401346			imgext  =  ".avif" ;
13411347			break ;
1348+ 		case  IMAGE_FILETYPE_HEIF :
1349+ 			imgext  =  ".heif" ;
1350+ 			break ;
1351+ 	break ;
13421352	}
13431353
13441354	if  (imgext ) {
@@ -1423,6 +1433,11 @@ PHPAPI int php_getimagetype(php_stream *stream, const char *input, char *filetyp
14231433		return  IMAGE_FILETYPE_JP2 ;
14241434	}
14251435
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+ 
14261441	if  (!php_stream_rewind (stream ) &&  php_is_image_avif (stream )) {
14271442		return  IMAGE_FILETYPE_AVIF ;
14281443	}
@@ -1515,6 +1530,11 @@ static void php_getimagesize_from_stream(php_stream *stream, char *input, zval *
15151530		case  IMAGE_FILETYPE_AVIF :
15161531			result  =  php_handle_avif (stream );
15171532			break ;
1533+ 		case  IMAGE_FILETYPE_HEIF :
1534+ 			if  (!php_stream_rewind (stream )) {
1535+ 				result  =  php_handle_avif (stream );
1536+ 			}
1537+ 			break ;
15181538		default :
15191539		case  IMAGE_FILETYPE_UNKNOWN :
15201540			break ;
0 commit comments