从 Rails 4 中的 Base64 编码图像字符串中检索 content_type 和文件名?

Retrieve content_type and file name from Base64 encoded image string in Rails 4?

jpeg 图像已解码为保存在 uploaded_io 中的字符串:

uploaded_io = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2....."

在rails4 app中,image magick库已经安装,gem mini_magickGemfile。从 uploaded_io,我们需要检索 content_type、大小和文件名(无需调整图像大小和操作)。我们尝试在控制器中使用 Ruby 的 base64 模块,但没有成功(错误和 decoded64 returns 不是图像文件):

require 'base64'

img = Base64.decode64(uploaded_io)
type = img.content_type #error
size = img.size  #error

有一个类似的post。但是 ActiveSupport::Base64 在 Rails 4 中停用,不能应用于 Rails 4.

不会说 Ruby 或 Rails,我不太明白你的问题,但我认为你正在尝试获取有关 base64 编码图像的信息,我或许可以提供帮助.恐怕我只能从命令行方面来找你,但希望你能 Ruby-ize that...

让我们创建一个小图像:

convert -size 50x50 xc:red xc:lime xc:blue +append image.gif

要使用 ImageMagick 获取有关图像的信息,您通常使用 IM 套件中的 identify 程序,如下所示:

identify -verbose image.gif

Image: image.gif
  Format: GIF (CompuServe graphics interchange format)
  Mime type: image/gif
  Class: PseudoClass
  Geometry: 150x50+0+0
  Units: Undefined
  Type: Palette
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8/1-bit
  Channel depth:
    red: 1-bit
    green: 1-bit
    blue: 1-bit
  Channel statistics:
    Pixels: 7500
    Red:
      min: 0 (0)
      max: 255 (1)
      mean: 85 (0.333333)
      standard deviation: 120.208 (0.471405)
      kurtosis: -1.5
      skewness: 0.707107
      entropy: 0.918296
    Green:
      min: 0 (0)
      max: 255 (1)
      mean: 85 (0.333333)
      standard deviation: 120.208 (0.471405)
      kurtosis: -1.5
      skewness: 0.707107
      entropy: 0.918296
    Blue:
      min: 0 (0)
      max: 255 (1)
      mean: 85 (0.333333)
      standard deviation: 120.208 (0.471405)
      kurtosis: -1.5
      skewness: 0.707107
      entropy: 0.918296
  Image statistics:
    Overall:
      min: 0 (0)
      max: 255 (1)
      mean: 85 (0.333333)
      standard deviation: 120.208 (0.471405)
      kurtosis: -1.5
      skewness: 0.707107
      entropy: 0.918296
  Colors: 3
  Histogram:
      2500: (  0,  0,255) #0000FF blue
      2500: (  0,255,  0) #00FF00 lime
      2500: (255,  0,  0) #FF0000 red
  Colormap entries: 4
  Colormap:
         0: (255,  0,  0) #FF0000 red
         1: (  0,255,  0) #00FF00 lime
         2: (  0,  0,255) #0000FF blue
         3: (  0,  0,  0) #000000 black
  Rendering intent: Perceptual
  Gamma: 0.454545
  Chromaticity:
    red primary: (0.64,0.33)
    green primary: (0.3,0.6)
    blue primary: (0.15,0.06)
    white point: (0.3127,0.329)
  Background color: red
  Border color: srgb(223,223,223)
  Matte color: grey74
  Transparent color: black
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 150x50+0+0
  Dispose: Undefined
  Compression: LZW
  Orientation: Undefined
  Properties:
    date:create: 2015-11-17T10:07:39+00:00
    date:modify: 2015-11-17T10:07:39+00:00
    signature: 48d1b973cce66f9a19f3b3738773a30f0519438d893cdfff2223e1941589e008
  Artifacts:
    filename: image.gif
    verbose: true
  Tainted: False
  Filesize: 325B
  Number pixels: 7.5K
  Pixels per second: 7.5EB
  User time: 0.000u
  Elapsed time: 0:01.000
  Version: ImageMagick 6.9.2-6 Q16 x86_64 2015-11-15 http://www.imagemagick.org

如果我想对其进行 base64 编码,我会像这样使用 openssl

openssl enc -base64 -in image.gif

R0lGODlhlgAyAPEAAP8AAAD/AAAA/wAAACH5BAAAAAAALAAAAACWADIAAAL+hI+p
y50Bo5y02juF3rz7D4adQ5YmgqXqKonuC3PnTD/sjbfxzsv1f8oJb73iDogkDZcp
o9OVjC6Y1Mrz+pFqD9VuBAvebLdebzg81pa7Z3Bauq62se9onDq/1pN3Zv65h9S3
9OcUCDQ4VGh0+JMotFjUWPOYE9kzSVOJc8mTObNJ1BnzGRS6MkpaWnKKmvqyytra
9AoV6zBLWxtyi5t7sSvS2/ALHAwyzFBscYycrLBs1ezxDB2dMT1SjXKtky22zdX9
9Q0eDjBOXi5wbpAOsa7Rjv4ez97+HmA/n7+PXx+PH8B1AtP5O9cv4D+DChEOLFdw
3MFwCQkulNiQ4sMXbxG7TdxWEeJFjxlBbszW8drHaiG/FQAAOw==

我的 post 的目的是表明您可以将 base64 乱码输入 identify 来解释它,如下所示:

identify -verbose "data:image/gif;base64,R0lGODlhlgAyAPEAAP8AAAD/AAAA/wAAACH5BAAAAAAALAAAAACWADIAAAL+hI+p
> y50Bo5y02juF3rz7D4adQ5YmgqXqKonuC3PnTD/sjbfxzsv1f8oJb73iDogkDZcp
> o9OVjC6Y1Mrz+pFqD9VuBAvebLdebzg81pa7Z3Bauq62se9onDq/1pN3Zv65h9S3
> 9OcUCDQ4VGh0+JMotFjUWPOYE9kzSVOJc8mTObNJ1BnzGRS6MkpaWnKKmvqyytra
> 9AoV6zBLWxtyi5t7sSvS2/ALHAwyzFBscYycrLBs1ezxDB2dMT1SjXKtky22zdX9
> 9Q0eDjBOXi5wbpAOsa7Rjv4ez97+HmA/n7+PXx+PH8B1AtP5O9cv4D+DChEOLFdw
> 3MFwCQkulNiQ4sMXbxG7TdxWEeJFjxlBbszW8drHaiG/FQAAOw=="
Image:
  Base filename: FQAAOw==
  Format: GIF (CompuServe graphics interchange format)
  Mime type: image/gif
  Class: PseudoClass
  Geometry: 150x50+0+0
  Units: Undefined
  Type: Palette
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8/1-bit
  Channel depth:
    red: 1-bit
    green: 1-bit
    blue: 1-bit
  Channel statistics:
    Pixels: 7500
    Red:
      min: 0 (0)
      max: 255 (1)
      mean: 85 (0.333333)
      standard deviation: 120.208 (0.471405)
      kurtosis: -1.5
      skewness: 0.707107
      entropy: 0.918296
    Green:
      min: 0 (0)
      max: 255 (1)
      mean: 85 (0.333333)
      standard deviation: 120.208 (0.471405)
      kurtosis: -1.5
      skewness: 0.707107
      entropy: 0.918296
    Blue:
      min: 0 (0)
      max: 255 (1)
      mean: 85 (0.333333)
      standard deviation: 120.208 (0.471405)
      kurtosis: -1.5
      skewness: 0.707107
      entropy: 0.918296
  Image statistics:
    Overall:
      min: 0 (0)
      max: 255 (1)
      mean: 85 (0.333333)
      standard deviation: 120.208 (0.471405)
      kurtosis: -1.5
      skewness: 0.707107
      entropy: 0.918296
  Colors: 3
  Histogram:
      2500: (  0,  0,255) #0000FF blue
      2500: (  0,255,  0) #00FF00 lime
      2500: (255,  0,  0) #FF0000 red
  Colormap entries: 4
  Colormap:
         0: (255,  0,  0) #FF0000 red
         1: (  0,255,  0) #00FF00 lime
         2: (  0,  0,255) #0000FF blue
         3: (  0,  0,  0) #000000 black
  Rendering intent: Perceptual
  Gamma: 0.454545
  Chromaticity:
    red primary: (0.64,0.33)
    green primary: (0.3,0.6)
    blue primary: (0.15,0.06)
    white point: (0.3127,0.329)
  Background color: red
  Border color: srgb(223,223,223)
  Matte color: grey74
  Transparent color: black
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 150x50+0+0
  Dispose: Undefined
  Compression: LZW
  Orientation: Undefined
  Properties:
    date:create: 2015-11-17T10:12:05+00:00
    date:modify: 2015-11-17T10:12:05+00:00
    signature: 48d1b973cce66f9a19f3b3738773a30f0519438d893cdfff2223e1941589e008
  Artifacts:
    filename: data:image/gif;base64,R0lGODlhlgAyAPEAAP8AAAD/AAAA/wAAACH5BAAAAAAALAAAAACWADIAAAL+hI+p
y50Bo5y02juF3rz7D4adQ5YmgqXqKonuC3PnTD/sjbfxzsv1f8oJb73iDogkDZcp
o9OVjC6Y1Mrz+pFqD9VuBAvebLdebzg81pa7Z3Bauq62se9onDq/1pN3Zv65h9S3
9OcUCDQ4VGh0+JMotFjUWPOYE9kzSVOJc8mTObNJ1BnzGRS6MkpaWnKKmvqyytra
9AoV6zBLWxtyi5t7sSvS2/ALHAwyzFBscYycrLBs1ezxDB2dMT1SjXKtky22zdX9
9Q0eDjBOXi5wbpAOsa7Rjv4ez97+HmA/n7+PXx+PH8B1AtP5O9cv4D+DChEOLFdw
3MFwCQkulNiQ4sMXbxG7TdxWEeJFjxlBbszW8drHaiG/FQAAOw==
    verbose: true
  Tainted: False
  Filesize: 325B
  Number pixels: 7.5K
  Pixels per second: 7.5EB
  User time: 0.000u
  Elapsed time: 0:01.000
  Version: ImageMagick 6.9.2-6 Q16 x86_64 2015-11-15 http://www.imagemagick.org
  [1]: http://i.stack.imgur.com/j9Ei0.gif

或者,您可以使用 convert 并从其 base64 编码状态重新创建图像,如下所示:

{ echo "data:image/png;base64,"; openssl enc -base64 -in image.png; } | convert inline:- decoded.gif