image_type_to_extension

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

image_type_to_extension获取图像类型的文件扩展名

描述

image_type_to_extension(int $image_type, bool $include_dot = true): string|false

返回给定 IMAGETYPE_XXX 常量的扩展名。

参数

image_type

一个 IMAGETYPE_XXX 常量。

include_dot

是否在扩展名之前添加点。默认为 true

返回值

一个字符串,包含与给定图像类型相对应的扩展名,如果失败则为 false

示例

示例 #1 image_type_to_extension() 示例

<?php
// 创建图像实例
$im = imagecreatetruecolor(100, 100);

// 保存图像
imagepng($im, './test' . image_type_to_extension(IMAGETYPE_PNG));
imagedestroy($im);
?>

注释

注意:

此函数不需要 GD 图像库。

添加注释

用户贡献注释 7 个注释

twitter.com/jonathansampson
2 年前
如果您想从文件名(字符串)中获取扩展名,以下内容可以避免您对将字符串拆分成部分的挫败感(请务必阅读 pathinfo 的文档警告)

<?php

$filename
= "wallpaper.jpg";
$extension = pathinfo( $filename, PATHINFO_EXTENSION );

echo
$extension; // "jpg"

?>
Ian Paul Short chukdocsAtHotmailDotCom
17 年前
致:mail at spybreak dot de

我注意到您的解决方案适用于 mime_type_to_extension,但它有缺陷,因为 MIME 类型到扩展名不是唯一的。请查看我的示例以了解我观察到的内容。

此函数执行图像类型或 MIME 类型到扩展名的转换。它存在局限性,不会尝试处理重复的 MIME 类型。不完整!
<?php
if(!function_exists('image_type_to_extension')){

$extension;

function
image_type_or_mime_type_to_extension($image_type, $include_dot) {
define ("INVALID_IMAGETYPE", '');

$extension = INVALID_IMAGETYPE; /// Default return value for invalid input

$image_type_identifiers = array ( ### These values correspond to the IMAGETYPE constants
array (IMAGETYPE_GIF => 'gif', "mime_type" => 'image/gif'), ### 1 = GIF
array (IMAGETYPE_JPEG => 'jpg', "mime_type" => 'image/jpeg'), ### 2 = JPG
array (IMAGETYPE_PNG => 'png', "mime_type" => 'image/png'), ### 3 = PNG
array (IMAGETYPE_SWF => 'swf', "mime_type" => 'application/x-shockwave-flash'), ### 4 = SWF // A. Duplicated MIME type
array (IMAGETYPE_PSD => 'psd', "mime_type" => 'image/psd'), ### 5 = PSD
array (IMAGETYPE_BMP => 'bmp', "mime_type" => 'image/bmp'), ### 6 = BMP
array (IMAGETYPE_TIFF_II => 'tiff', "mime_type" => 'image/tiff'), ### 7 = TIFF (intel byte order)
array (IMAGETYPE_TIFF_MM => 'tiff', "mime_type" => 'image/tiff'), ### 8 = TIFF (motorola byte order)
array (IMAGETYPE_JPC => 'jpc', "mime_type" => 'application/octet-stream'), ### 9 = JPC // B. Duplicated MIME type
array (IMAGETYPE_JP2 => 'jp2', "mime_type" => 'image/jp2'), ### 10 = JP2
array (IMAGETYPE_JPX => 'jpf', "mime_type" => 'application/octet-stream'), ### 11 = JPX // B. Duplicated MIME type
array (IMAGETYPE_JB2 => 'jb2', "mime_type" => 'application/octet-stream'), ### 12 = JB2 // B. Duplicated MIME type
array (IMAGETYPE_SWC => 'swc', "mime_type" => 'application/x-shockwave-flash'), ### 13 = SWC // A. Duplicated MIME type
array (IMAGETYPE_IFF => 'aiff', "mime_type" => 'image/iff'), ### 14 = IFF
array (IMAGETYPE_WBMP => 'wbmp', "mime_type" => 'image/vnd.wap.wbmp'), ### 15 = WBMP
array (IMAGETYPE_XBM => 'xbm', "mime_type" => 'image/xbm') ### 16 = XBM
);

if((
is_int($image_type)) AND (IMAGETYPE_GIF <= $image_type) AND (IMAGETYPE_XBM >= $image_type)){
$extension = $image_type_identifiers[$image_type-1]; // -1 because $image_type_identifiers array starts at [0]
$extension = $extension[$image_type];
}
elseif(
is_string($image_type) AND (($image_type != 'application/x-shockwave-flash') OR ($image_type != 'application/octet-stream'))){

$extension = match_mime_type_to_extension($image_type, $image_type_identifiers);
}
else
{
$extension = INVALID_IMAGETYPE;
}

if(
is_bool($include_dot)){

if((
false != $include_dot) AND (INVALID_IMAGETYPE != $extension)){
$extension = '.' . $extension;
}
}
else
{
$extension = INVALID_IMAGETYPE;
}

return
$extension;

}
}

function
match_mime_type_to_extension($image_type, $image_type_identifiers){
// Return from loop on a match
foreach($image_type_identifiers as $_key_outer_loop => $_val_outer_loop){
foreach(
$_val_outer_loop as $_key => $_val){
if(
is_int ($_key)){ // Keep record of extension for mime check
$extension = $_val;
}
if(
$_key == 'mime_type'){
if(
$_val === $image_type){ // Found match no need to continue looping
return $extension; ### Return
}
}
}
}
// Compared all values without match
return $extension = INVALID_IMAGETYPE;
}

$extension = image_type_or_mime_type_to_extension($image_type, $include_dot);
return
$extension;
}
?>
ergunadem5508 at gmail dot com
2 年前
// 如果您只想从文件路径名中查找格式,而无需创建任何图像

// 图像路径名
$image_name = "image name.png";

// 最后一点之后的自然是格式。
$dots = explode(".",$image_name);

// 我们将 $dots 的最后数据分配给变量 $type。
$type = $dots[(count($dots)-1)];

// 输出将不带点。
echo "without dot : ".$type;

// 带点的
$type = ".".$type;
echo "dotted : ".$type;
aleksandrs dot bogdanovs at gmail dot com
18 年前
当我为我的照片网站编写脚本时,有必要编写这样一个函数,它可以获取上传文件(图像)的扩展名,因此函数是

<?php
function get_extension($imagetype)
{
if(empty(
$imagetype)) return false;
switch(
$imagetype)
{
case
'image/bmp': return '.bmp';
case
'image/cis-cod': return '.cod';
case
'image/gif': return '.gif';
case
'image/ief': return '.ief';
case
'image/jpeg': return '.jpg';
case
'image/pipeg': return '.jfif';
case
'image/tiff': return '.tif';
case
'image/x-cmu-raster': return '.ras';
case
'image/x-cmx': return '.cmx';
case
'image/x-icon': return '.ico';
case
'image/x-portable-anymap': return '.pnm';
case
'image/x-portable-bitmap': return '.pbm';
case
'image/x-portable-graymap': return '.pgm';
case
'image/x-portable-pixmap': return '.ppm';
case
'image/x-rgb': return '.rgb';
case
'image/x-xbitmap': return '.xbm';
case
'image/x-xpixmap': return '.xpm';
case
'image/x-xwindowdump': return '.xwd';
case
'image/png': return '.png';
case
'image/x-jps': return '.jps';
case
'image/x-freehand': return '.fh';
default: return
false;
}
}
?>

这对那些将文件上传到服务器的人很有用。
Ian Paul Short chukdocsAtHotmailDotCom
17 年前
2006-09-29

关于此页面上的一些贡献,我有一些说明。

1. 我认为,所有模拟 "image_type_to_extension" 函数的方案都或多或少地达不到目标(参见我下面的评论)。因此,我编写了自己的函数并将其提交到下面的页面。对于我的工作,任何评论、发现的错误或改进都将不胜感激。

2. 避免使用非传统方法在 Switch 语句中使用 "Break"(请注意 return 语句的使用!)。即使在代码开始时没有任何作用,也应该添加默认情况(这样其他人可以意识到默认情况并非必要,或者最坏的情况是忘记了)。

3. 在一个受你控制的环境中,通过文件扩展名或 MIME 类型确定内容的风险似乎是解决问题的诱人方法。然而,在现实世界中,无法保证 MIME 类型或文件扩展名与其关联文件相匹配。

考虑使用以下函数获取图像类型:
getimagesize 或(在没有 GD 的情况下可用)
exif_imagetype

4. 编码不仅仅是将一些东西组合在一起完成一项工作!但无论做什么都是值得的 - 因此,脏话在这个论坛里没有立足之地!

5. 来自 "oridan at hotmail dot com" 的想法非常巧妙。我将仔细研究它,以用于自己的项目。
bimal at sanjaal dot com
12 年前
<?php
/**
* 返回带有点的常见扩展名
*/
function gd_extension($full_path_to_image='')
{
$extension = 'null';
if(
$image_type = exif_imagetype($full_path_to_image))
{
$extension = image_type_to_extension($image_type, false);
}
$known_replacements = array(
'jpeg' => 'jpg',
'tiff' => 'tif',
);
$extension = '.'.str_replace(array_keys($known_replacements), array_values($known_replacements), $extension);

return
$extension;
}

# 测试
$images = glob('*');
foreach(
$images as $i => $image)
{
$extension = gd_extension($image);
echo
"\r\n", $image, ': ', $extension;
}
?>

有时,扩展名与预期不符,直到我编写了这段代码。
mew at world dot org
16 年前
没必要过于复杂化。

<?php

if ( !function_exists('image_type_to_extension') ) {

function
image_type_to_extension ($type, $dot = true)
{
$e = array ( 1 => 'gif', 'jpeg', 'png', 'swf', 'psd', 'bmp'
'tiff'
, 'tiff', 'jpc', 'jp2', 'jpf', 'jb2', 'swc',
'aiff', 'wbmp', 'xbm');

// 我们期望一个整数。
$type = (int)$type;
if (!
$type) {
trigger_error( '...在这里产生一个错误...', E_USER_NOTICE );
return
null;
}

if ( !isset(
$e[$type]) ) {
trigger_error( '...在这里产生一个错误...' E_USER_NOTICE );
return
null;
}

return (
$dot ? '.' : '') . $e[$type];
}

}

if ( !
function_exists('image_type_to_mime_type') ) {

function
image_type_to_mime_type ($type)
{
$m = array ( 1 => 'image/gif', 'image/jpeg', 'image/png',
'application/x-shockwave-flash', 'image/psd', 'image/bmp',
'image/tiff', 'image/tiff', 'application/octet-stream',
'image/jp2', 'application/octet-stream', 'application/octet-stream',
'application/x-shockwave-flash', 'image/iff', 'image/vnd.wap.wbmp', 'image/xbm');

// 我们期望一个整数。
$type = (int)$type;
if (!
$type) {
trigger_error( '...在这里产生一个错误...', E_USER_NOTICE );
return
null;
}

if ( !isset(
$m[$type]) ) {
trigger_error( '...在这里产生一个错误...' E_USER_NOTICE );
return
null;
}

return
$m[$type];
}

}

?>
To Top