获取图像的类型

1、使用函数exif_imagetype获取图像的类型

  语法:exif_imagetype(string filename)

  参数说明:

  filename——图像文件的名称

  返回值:对应图像的常量,如果该函数在读取到的第一个字节里没有找到图像的签名,返回FALSE。

  exif_imagetype()返回值对应的图像类型常量

常量
1IMAGETYPE_GIF
2IMAGETYPE_JPEG
3IMAGETYPE_PNG
4IMAGETYPE_SWF
5IMAGETYPE_PSD
6IMAGETYPE_BMP
7IMAGETYPE_TITF_II(Intel 字节顺序)
8IMAGETYPE_TIFF_MM(Motorola字 节顺序)
9IMAGETYPE_JPG
10IMAGETYPE_JP2
11IMAGETYPE_JPX
12IMAGETYPE_JB2
13IMAGETYPE_SWC
14IMAGETYPE_IFF
15 IMAGETYPE_WBMP
16IMAGETYPE_XBM

下面使用exif_imagetype()函数简单判断一个图像类型是否为gif、jpg和png图像类型。

<?php 
/*
    如果要使用exif_imagetype前,必须在配置文件php.ini里打开以下两个模块,
    extension=php_mbstring.dll和extension=php_exif.dll。
*/
//使用函数exif_imagetype获取图像的类型
header("Content-type:text/html;charset=utf-8");
//$filename="first.gif";
//$filename="second.jpg";
$filename="three.png";
if(exif_imagetype($filename)==IMAGETYPE_GIF){
    echo "{$filename}格式:GIF";
}elseif(exif_imagetype($filename)==IMAGETYPE_JPEG){
    echo "{$filename}格式:JPEG";
}elseif(exif_imagetype($filename)==IMAGETYPE_PNG){
    echo "{$filename}格式:PNG";
}else{
    echo "其他格式";
}
?>

测试结果:

当文件名为$filename="first.gif"时,浏览器输出:first.gif格式:GIF

当文件名为$filename="second.jpg"时,浏览器输出:second.jpg格式:JPEG

当文件名为$filename="three.png"时,浏览器输出:three.pngf格式:PNG

 

2、使用函数getimagetsize()获取图像的类型

  语法:array getimagesize(string filename [,array &imageinfo])

  参数说明:

  filename——指定的图像名称

  返回值:

  返回一个具有四个单元的数组。

  索引0包含图像宽度的像素值

  索引1包含图像高度的像素值

  索引2包含图像类型的标记:1=GIF,2=JPG,3=PNG,4=SWF...共16钟图像类型

  索引3是文本字符串,内容为"height=高度 width=宽度",可直接用于IMG标记

<?php 
//getimagesize获取图像信息
//该函数不仅可以获取图像的大小,还可以获取图像的格式类型
header("Content-type:text/html;charset=utf-8");
//$filename="first.gif";
//$filename="second.jpg";
$filename="three.png";
$arr=getimagesize($filename);
//var_dump($arr);
/*
    array(7) {
      [0]=>
      int(740)                                    //图片宽度
      [1]=>
      int(254)                                    //图片高度
      [2]=>
      int(1)                                    //图片类型:1对应gif
      [3]=>
      string(24) "width="740" height="254""        //文本字符串
      ["bits"]=>                                //图像的每种颜色的位数,二进制格式
      int(8)
      ["channels"]=>                            //图像的通道值,RGB图像默认是3
      int(3)
      ["mime"]=>                                //图像的MIME信息,此信息可用在HTTP Content-type头信息中发送正确的信息,如header("Content-type:image/gif")
      string(9) "image/gif"
    }
*/
switch($arr[2]){
    case 1:
        $type="gif";
        break;
    case 2:
        $type="jpeg";
        break;
    case 3:
        $type="png";
        break;
    default:
        $type="other type";

}
echo "图像类型为:".$type;
/*
    输出结果:
    当$filename="first.gif" ,结果为:图像类型为:gif
    当$filename="second.jpg" ,结果为:图像类型为:jpeg
    当$filename="three.png" ,结果为:图像类型为:png
*/
?>

 

3、通过函数strrchr()获取文件名的后缀名

<?php 
    //把文件名当作字符串来处理
    //文件后缀即为图片类型
    //strrchr()函数查找字符串在另一个字符串中最后一次出现的位置,并返回该位置到字符串结尾的所有字符
    header("Content-type:text/html;charset=utf-8");
    //$filename="first.gif";
    //$filename="second.jpg";
    $filename="three.png";
    $type=strrchr($filename,'.');
    echo "图片类型为:".$type;
    /*
        结果:
        当$filename="first.gif"时,结果:图片类型为:.gif
        当$filename="second.jpg"时,结果:图片类型为:.jpg
        当$filename="three.png"时,结果:图片类型为:.png
    */
?>

 

4、通过函数strrpos()获取文件名的后缀

<?php 
    //把文件名当作字符串来处理
    //文件后缀即为图片类型
    //strrpos()函数查找字符串在另一个字符串中最后一次出现的位置,并返回该位置到字符串结尾的所有字符
    header("Content-type:text/html;charset=utf-8");
    //$filename="first.gif";
    //$filename="second.jpg";
    $filename="three.png";
    $type=substr($filename,strrpos($filename,'.'));
    echo "图片类型为:".$type;
    /*
        结果:
        当$filename="first.gif"时,结果:图片类型为:gif
        当$filename="second.jpg"时,结果:图片类型为:jpg
        当$filename="three.png"时,结果:图片类型为:png
    */
?>

 

5、通过函数explode()获取图片类型

<?php 
    //把文件名当作字符串来处理
    //explode()分割字符串,最后一个键值即为图片类型
    header("Content-type:text/html;charset=utf-8");
    //$filename="first.gif";
    //$filename="second.jpg";
    $filename="three.png";
    //$type=@end(explode(".",$filename));    //end函数用来将数组的内部指针指向最后一个单元,并返回数组的最后一个值
    $arr=explode(".",$filename);
    $type=array_pop($arr);
    echo "图片类型为:".$type;
    /*
        结果:
        当$filename="first.gif"时,结果:图片类型为:gif
        当$filename="second.jpg"时,结果:图片类型为:jpg
        当$filename="three.png"时,结果:图片类型为:png
    */
?>

6、通过函数pathinfo()函数获取图片类型

<?php 
//把图片路径当作文件路径,那么这里就需要gd类库函数或者php文件函数
//函数pathinfo()以数组的形式返回文件路径的信息
//返回一个关联数组包含有path的信息
//语法:pathinfo(string $path [,$options=PATHINFO_DIRNAME|PATHINFO_BASENAME|PATHINFO_EXTENSION|PATHINFO_FILENAME])
//如果指定了options,将会返回指定元素,包括PATHINFO_DIRNAME、PATHINFO_BASENAME和PATHINFO_EXTENSION或PATHINFO_FILENAME
//如果没有指定options,默认是返回全部的单元
//返回值,如果没有传入options,将会返回包括以下单元的数组array:dirname、basenmae和extension(如果有),以及filename
header("Content-type:text/html;charset=utf-8");
$filename="first.gif";
//$filename="second.jpg";
//$filename="three.png";
$type=pathinfo($filename,PATHINFO_EXTENSION);

echo "图片类型为:".$type;
    /*
        结果:
        当$filename="first.gif"时,结果:图片类型为:gif
        当$filename="second.jpg"时,结果:图片类型为:jpg
        当$filename="three.png"时,结果:图片类型为:png
    */
?>

小结:

主流使用第3种方法获取图片类型,但是从安全角度来考虑,避免别人伪造文件名,推荐使用第2种方法。

 

转载于:https://www.cnblogs.com/mnhome/p/9863899.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.ylw.p2p.common.utils; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FileUtils { public final static Map IMG_FILE_TYPE_MAP = new HashMap(); /** * @Description: 图片文件上传 * @author Xiao.Sky * @creaetime 2015年4月17日下午5:20:27 * @param request * @param response * @param photo * @param strtmp * 文件名称 xxx.jpg * @param path * 文件路径 * @param num * @return */ public static boolean updatePhoto(HttpServletRequest request,HttpServletResponse response, File photo, String strtmp,String path, long num) { File dir = new File(path); // 如果不存在就创建次文件夹 if (!dir.exists()) { dir.mkdirs(); } File newFile = new File(dir, strtmp); // 如果存在此文件就删除此文件 if (newFile.exists()) newFile.delete(); BufferedInputStream bis = null; FileInputStream fis = null; try { fis = new FileInputStream(photo); FileOutputStream fos = new FileOutputStream(newFile); BufferedImage src = ImageIO.read(fis); ImageIO.write(src, "png", fos); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != bis) { bis.close(); } if (null != fis) { fis.close(); } } catch (IOException e) { e.printStackTrace(); } } return true; } /** * * @Description: 普通文件上传 * @author Xiao.Sky * @creaetime 2015年4月23

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值