【问题标题】:How to detect extension of image without extension?如何检测没有扩展的图像扩展?
【发布时间】:2013-05-22 10:34:47
【问题描述】:

我的情况: 我有基于 RubyOnRails 的应用程序。 我使用 Carrierwave 上传图片。

我错误地保存了许多没有扩展名的文件。 所以,所有这些的 content_type 都是空值

有没有办法恢复这些图像的扩展?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby imagemagick carrierwave rmagick


    【解决方案1】:

    您可以尝试使用 unix 命令file 来尝试检测 MIME 类型。例如:

    $ file -bi i_am_a_png
    image/png; charset=binary
    

    这会尝试通过其签名(二进制结构)来确定文件类型。

    您可以像这样运行 bash 脚本来推断文件扩展名并相应地重命名文件:

    #!/bin/bash
    
    IFS=$"\n"
    for f in *
    do
      mime=`file -bi $f`
      if [ $? == 0 ]
      then
          ext=( $(echo $mime | awk -F ";" '{ gsub(".*/", ""); print $1}') )
          cmd="mv $f $f.$ext"
    
          echo $cmd
          # `$cmd`    # Uncomment when you're happy with the command output
      else
          echo "Could not detect file type"
      fi
    done
    

    它只是遍历当前目录中的文件,运行file -bi 并抓取可以作为扩展名传递的字符串部分(“image/png”中的“png”)。然后它用扩展名重命名文件。默认情况下,它只是打印出命令,所以如果你满意,它会取消注释,它会做正确的事情。

    【讨论】:

      【解决方案2】:

      您可能必须从文件签名中推断出来:http://en.wikipedia.org/wiki/List_of_file_signatures

      【讨论】:

        【解决方案3】:

        你也可以试试

        require 'RMagick'
        puts Magick::Image::read(filename).first.format
        

        这是文档的link

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-28
          • 1970-01-01
          • 2012-02-13
          • 2016-04-26
          • 2018-02-04
          • 1970-01-01
          • 2019-08-06
          • 1970-01-01
          相关资源
          最近更新 更多