118 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php declare(strict_types=1);
 | |
| 
 | |
| abstract class MediaEngine
 | |
| {
 | |
|     public const GD = "gd";
 | |
|     public const IMAGICK = "convert";
 | |
|     public const FFMPEG = "ffmpeg";
 | |
|     public const STATIC = "static";
 | |
| 
 | |
|     const IMAGE_ENGINES = [
 | |
|         "GD" => MediaEngine::GD,
 | |
|         "ImageMagick" => MediaEngine::IMAGICK,
 | |
|     ];
 | |
| 
 | |
|     public const ALL = [
 | |
|         MediaEngine::GD,
 | |
|         MediaEngine::FFMPEG,
 | |
|         MediaEngine::IMAGICK,
 | |
|         MediaEngine::STATIC,
 | |
|     ];
 | |
|     private const OUTPUT_SUPPORT = [
 | |
|         MediaEngine::GD => [
 | |
|             MimeType::GIF,
 | |
|             MimeType::JPEG,
 | |
|             MimeType::PNG,
 | |
|             MimeType::WEBP
 | |
|         ],
 | |
|         MediaEngine::IMAGICK => [
 | |
|             MimeType::GIF,
 | |
|             MimeType::JPEG,
 | |
|             MimeType::PNG,
 | |
|             MimeType::WEBP,
 | |
|             MimeType::WEBP_LOSSLESS,
 | |
|         ],
 | |
|         MediaEngine::FFMPEG => [
 | |
|             MimeType::JPEG,
 | |
|             MimeType::WEBP,
 | |
|             MimeType::PNG,
 | |
|         ],
 | |
|         MediaEngine::STATIC => [
 | |
|             MimeType::JPEG,
 | |
|         ],
 | |
|     ];
 | |
|     private const INPUT_SUPPORT = [
 | |
|         MediaEngine::GD => [
 | |
|             MimeType::BMP,
 | |
|             MimeType::GIF,
 | |
|             MimeType::JPEG,
 | |
|             MimeType::PNG,
 | |
|             MimeType::TGA,
 | |
|             MimeType::WEBP,
 | |
|             MimeType::WEBP_LOSSLESS,
 | |
|         ],
 | |
|         MediaEngine::IMAGICK => [
 | |
|             MimeType::BMP,
 | |
|             MimeType::GIF,
 | |
|             MimeType::JPEG,
 | |
|             MimeType::PNG,
 | |
|             MimeType::PPM,
 | |
|             MimeType::PSD,
 | |
|             MimeType::TGA,
 | |
|             MimeType::TIFF,
 | |
|             MimeType::WEBP,
 | |
|             MimeType::WEBP_LOSSLESS,
 | |
|             MimeType::ICO,
 | |
|         ],
 | |
|         MediaEngine::FFMPEG => [
 | |
|             MimeType::AVI,
 | |
|             MimeType::MKV,
 | |
|             MimeType::WEBM,
 | |
|             MimeType::MP4_VIDEO,
 | |
|             MimeType::QUICKTIME,
 | |
|             MimeType::FLASH_VIDEO,
 | |
|         ],
 | |
|         MediaEngine::STATIC => [
 | |
|             MimeType::JPEG,
 | |
|             MimeType::GIF,
 | |
|             MimeType::PNG,
 | |
|         ],
 | |
|     ];
 | |
|     public const RESIZE_TYPE_SUPPORT = [
 | |
|         MediaEngine::GD => [
 | |
|             Media::RESIZE_TYPE_FIT,
 | |
|             Media::RESIZE_TYPE_STRETCH
 | |
|         ],
 | |
|         MediaEngine::IMAGICK => [
 | |
|             Media::RESIZE_TYPE_FIT,
 | |
|             Media::RESIZE_TYPE_FIT_BLUR,
 | |
|             Media::RESIZE_TYPE_FIT_BLUR_PORTRAIT,
 | |
|             Media::RESIZE_TYPE_FILL,
 | |
|             Media::RESIZE_TYPE_STRETCH,
 | |
|         ],
 | |
|         MediaEngine::FFMPEG => [
 | |
|             Media::RESIZE_TYPE_FIT
 | |
|         ],
 | |
|         MediaEngine::STATIC => [
 | |
|             Media::RESIZE_TYPE_FIT
 | |
|         ]
 | |
|     ];
 | |
| 
 | |
|     public static function is_output_supported(string $engine, string $mime): bool
 | |
|     {
 | |
|         return MimeType::matches_array(
 | |
|             $mime,
 | |
|             MediaEngine::OUTPUT_SUPPORT[$engine],
 | |
|             true
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public static function is_input_supported(string $engine, string $mime): bool
 | |
|     {
 | |
|         return MimeType::matches_array(
 | |
|             $mime,
 | |
|             MediaEngine::INPUT_SUPPORT[$engine]
 | |
|         );
 | |
|     }
 | |
| }
 |