mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00

This is modelled similarly to the password registry API. We have an array to which new handlers can be added, and when a built-in handler cannot handle the image, we try the handlers in the array. The standard module is in control of registering a new constant for the image file type so that no clashes can occur. It also updates the image file type count constant. As such, the registration may only happen during module startup.
90 lines
3 KiB
C
90 lines
3 KiB
C
/*
|
|
+----------------------------------------------------------------------+
|
|
| Copyright (c) The PHP Group |
|
|
+----------------------------------------------------------------------+
|
|
| This source file is subject to version 3.01 of the PHP license, |
|
|
| that is bundled with this package in the file LICENSE, and is |
|
|
| available through the world-wide-web at the following url: |
|
|
| https://www.php.net/license/3_01.txt |
|
|
| If you did not receive a copy of the PHP license and are unable to |
|
|
| obtain it through the world-wide-web, please send a note to |
|
|
| license@php.net so we can mail you a copy immediately. |
|
|
+----------------------------------------------------------------------+
|
|
| Authors: Rasmus Lerdorf <rasmus@php.net> |
|
|
| Marcus Boerger <helly@php.net> |
|
|
+----------------------------------------------------------------------+
|
|
*/
|
|
|
|
#ifndef PHP_IMAGE_H
|
|
#define PHP_IMAGE_H
|
|
|
|
PHP_MINIT_FUNCTION(image);
|
|
PHP_MSHUTDOWN_FUNCTION(image);
|
|
|
|
/* {{{ enum image_filetype
|
|
This enum is used to have ext/standard/image.c and ext/exif/exif.c use
|
|
the same constants for file types.
|
|
*/
|
|
typedef enum
|
|
{ IMAGE_FILETYPE_UNKNOWN=0,
|
|
IMAGE_FILETYPE_GIF=1,
|
|
IMAGE_FILETYPE_JPEG,
|
|
IMAGE_FILETYPE_PNG,
|
|
IMAGE_FILETYPE_SWF,
|
|
IMAGE_FILETYPE_PSD,
|
|
IMAGE_FILETYPE_BMP,
|
|
IMAGE_FILETYPE_TIFF_II, /* intel */
|
|
IMAGE_FILETYPE_TIFF_MM, /* motorola */
|
|
IMAGE_FILETYPE_JPC,
|
|
IMAGE_FILETYPE_JP2,
|
|
IMAGE_FILETYPE_JPX,
|
|
IMAGE_FILETYPE_JB2,
|
|
IMAGE_FILETYPE_SWC,
|
|
IMAGE_FILETYPE_IFF,
|
|
IMAGE_FILETYPE_WBMP,
|
|
/* IMAGE_FILETYPE_JPEG2000 is a userland alias for IMAGE_FILETYPE_JPC */
|
|
IMAGE_FILETYPE_XBM,
|
|
IMAGE_FILETYPE_ICO,
|
|
IMAGE_FILETYPE_WEBP,
|
|
IMAGE_FILETYPE_AVIF,
|
|
IMAGE_FILETYPE_HEIF,
|
|
/* WHEN EXTENDING: PLEASE ALSO REGISTER IN basic_function.stub.php */
|
|
IMAGE_FILETYPE_FIXED_COUNT
|
|
} image_filetype;
|
|
/* }}} */
|
|
|
|
PHPAPI int php_getimagetype(php_stream *stream, const char *input, char *filetype);
|
|
|
|
PHPAPI const char * php_image_type_to_mime_type(int image_type);
|
|
|
|
PHPAPI bool php_is_image_avif(php_stream *stream);
|
|
|
|
/* return info as a struct, to make expansion easier */
|
|
struct php_gfxinfo {
|
|
unsigned int width;
|
|
unsigned int height;
|
|
zend_string *width_str;
|
|
zend_string *height_str;
|
|
unsigned int bits;
|
|
unsigned int channels;
|
|
};
|
|
|
|
typedef zend_result (*php_image_identify)(php_stream *stream);
|
|
typedef struct php_gfxinfo *(*php_image_get_info)(php_stream *stream);
|
|
|
|
struct php_image_handler {
|
|
const char *mime_type;
|
|
const char *extension;
|
|
const char *const_name;
|
|
php_image_identify identify;
|
|
php_image_get_info get_info;
|
|
};
|
|
|
|
#define PHP_IMAGE_CONST_NAME(suffix) ("IMAGETYPE_" suffix)
|
|
|
|
/* This should only be called on module init */
|
|
PHPAPI int php_image_register_handler(const struct php_image_handler *handler);
|
|
/* This should only be called on module shutdown */
|
|
PHPAPI zend_result php_image_unregister_handler(int image_type);
|
|
|
|
#endif /* PHP_IMAGE_H */
|