【问题标题】:Check image type if renamed from .png to .jpg如果从 .png 重命名为 .jpg,请检查图像类型
【发布时间】:2012-03-03 15:04:50
【问题描述】:

如果从.png重命名为.jpg,是否可以检查图像的类型?

我需要这个,因为当我使用调整大小功能时,如果上传的图像从 .png 重命名为 .jpg,我的网站将停止工作(我让我的代码只接受 .jpg 图像)

【问题讨论】:

  • 您使用什么过程来调整大小。你应该看看它,看看它是如何保存调整大小的图像并强制它为.jpg

标签: php image


【解决方案1】:

每个 .png 都以这些字节开头:

89 50 4E 47 0D 0A 1A 0A

它们是 PNG 签名。如果 .jpg 以这些字节开头,则它不是 jpg。

【讨论】:

    【解决方案2】:

    getimagesize 将包含有关图像类型的信息:

    $info = getimagesize('file.png');
    if($info[2] == IMAGETYPE_JPEG){
    
    }
    

    【讨论】:

      【解决方案3】:

      您始终可以使用exif_imagetype() 读取图像类型以检查图像

      $image_type = exif_imagetype($filename);
      

      例子:

      <?php
      if (exif_imagetype('image.gif') != IMAGETYPE_GIF) {
          echo 'The picture is not a gif';
      }
      ?>
      

      【讨论】:

        【解决方案4】:

        您需要知道的不是文件的历史,而是它的真实格式。您可以通过检查文件的内容来做到这一点:JPG 文件应以字节 FF D8 开头并以 FF D9 结尾。 PNG 文件以不同的签名开头:\211 P N G \r \n \032 \n(十六进制:89 50 4E 47 0D 0A 1A 0A)。

        有关详细信息,请参阅此网站: http://en.wikipedia.org/wiki/Magic_number_%28programming%29

        【讨论】:

          【解决方案5】:

          是的,你可以使用这个

          if($_FILES["imagefile"]["type"] == "image/jpeg")
          {
          
          return true;
          
          }
          
          else if($_FILES["imagefile"]["type"] == "image/png")
          
          {
          
          return false;
          
          }
          

          或者你应该使用这个 mime_content_type 更可靠,因为 $_FILES["imagefile"]["type"] 可以从客户端伪造......

          【讨论】:

          • 谢谢,但我已经尝试过了。 renamte .png 图片的图片类型为“Image/jpeg”
          【解决方案6】:

          试试file 命令。

          unknownimage为JPG图片时:

          $ file unknownimage 
          unknownimage: JPEG image data, baseline, precision 8, 400x400, frames 3
          

          unknownimage文件为PNG图片时:

          $ file unknownimage 
          unknownimage: PNG image data, 779 x 701, 8-bit/color RGBA, non-interlaced
          

          【讨论】:

            猜你喜欢
            • 2015-08-21
            • 1970-01-01
            • 2023-03-10
            • 2013-05-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多