从 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_magick
在Gemfile
。从 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
jpeg 图像已解码为保存在 uploaded_io
中的字符串:
uploaded_io = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2....."
在rails4 app中,image magick库已经安装,gem mini_magick
在Gemfile
。从 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