如果您想从文件名(字符串)中获取扩展名,以下内容可以避免您对将字符串拆分成部分的挫败感(请务必阅读 pathinfo 的文档警告)
<?php
$filename = "wallpaper.jpg";
$extension = pathinfo( $filename, PATHINFO_EXTENSION );
echo $extension; // "jpg"
?>
(PHP 5 >= 5.2.0, PHP 7, PHP 8)
image_type_to_extension — 获取图像类型的文件扩展名
返回给定 IMAGETYPE_XXX
常量的扩展名。
一个字符串,包含与给定图像类型相对应的扩展名,如果失败则为 false
。
示例 #1 image_type_to_extension() 示例
<?php
// 创建图像实例
$im = imagecreatetruecolor(100, 100);
// 保存图像
imagepng($im, './test' . image_type_to_extension(IMAGETYPE_PNG));
imagedestroy($im);
?>
注意:
此函数不需要 GD 图像库。
如果您想从文件名(字符串)中获取扩展名,以下内容可以避免您对将字符串拆分成部分的挫败感(请务必阅读 pathinfo 的文档警告)
<?php
$filename = "wallpaper.jpg";
$extension = pathinfo( $filename, PATHINFO_EXTENSION );
echo $extension; // "jpg"
?>
致: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;
}
?>
// 如果您只想从文件路径名中查找格式,而无需创建任何图像
// 图像路径名
$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;
当我为我的照片网站编写脚本时,有必要编写这样一个函数,它可以获取上传文件(图像)的扩展名,因此函数是
<?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;
}
}
?>
这对那些将文件上传到服务器的人很有用。
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" 的想法非常巧妙。我将仔细研究它,以用于自己的项目。
<?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;
}
?>
有时,扩展名与预期不符,直到我编写了这段代码。
没必要过于复杂化。
<?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];
}
}
?>