Python将字节字面量转换为图像 [英] Python Convert Bytes Literal To Image

查看:101
本文介绍了Python将字节字面量转换为图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Python3中,我正在开发一个音乐播放应用程序.我正在使用一个名为TinyTag的库来从音乐文件中获取元数据,例如标题和艺术家.它还支持获取专辑封面.当检索到艺术品时,将其加载为我认为称为字节的文字(我不熟悉).我想知道如何将这些数据转换为图像.这是代码:

In Python3 I am working on a music playing application. I'm using a library called TinyTag to get metadata from the music files, like the title and artist. It also supports getting the album art. When the art is retrieved it loads it as what I believe is called a bytes literal (I'm unfamiliar with it). I was wondering how to turn this data into an image. Here's the code:

from tinytag import TinyTag
tag = TinyTag.get("/path/to/file.mp3", image=True)
image_data = tag.get_image()
print(image_data)

图像数据是一个巨大的字符串,以字母"b"开头.看起来像这样:

The image data is a massive sting prefaced by the letter "b". It looks like this:

b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01...'

,但更长.如何将其转换为专辑封面图像.需要哪些库以及如何完成?

but is much longer. How do I convert this into the album cover image. What libraries are need and how can it be done?

推荐答案

您看到的字符串是图像文件的内容.您可以直接将字符串保存到文件中:

The string you see are the contents of an image file. You can just save the string directly to a file:

$ file /tmp/file.mp3
/tmp/file.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, JntStereo
$ ipython
Python 2.7.12 (default, Aug  9 2016, 15:48:18) 
Type "copyright", "credits" or "license" for more information.

IPython 3.2.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: from tinytag import TinyTag

In [2]: tag = TinyTag.get("/tmp/file.mp3", image=True)

In [3]: image_data = tag.get_image()

In [4]: type(image_data)
Out[4]: str

In [5]: image_data[:20]
Out[5]: '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00'

In [6]: with open("/tmp/album_art.jpg", "w") as f:
   ...:     f.write(image_data)
   ...:   

In [7]: exit()
$ file /tmp/album_art.jpg
/tmp/album_art.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72x72, segment length 16, Exif Standard: [TIFF image data, big-endian, direntries=7, orientation=upper-left, xresolution=98, yresolution=106, resolutionunit=2, software=Adobe Photoshop CS2 Windows, datetime=2008:04:02 00:23:04], baseline, precision 8, 320x300, frames 3

如果您使用的是python3,则必须在该模式下显式指定'wb',因为您将获得字节流:

If you are using python3, you will have to explicitly specify 'wb' in the mode, since you get a stream of bytes instead:

$ python3
Python 3.5.1 (default, Aug  9 2016, 15:35:51) 
[GCC 6.1.1 20160621 (Red Hat 6.1.1-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from tinytag import TinyTag
>>> tag = TinyTag.get("/tmp/file.mp3", image=True)
>>> image_data = tag.get_image()
>>> type(image_data)
<class 'bytes'>
>>> image_data[:20]
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00'
>>> with open("/tmp/album_art.jpg", "wb") as f:
...     f.write(image_data)
... 
64790
>>> exit()
$ file /tmp/album_art.jpg
/tmp/album_art.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72x72, segment length 16, Exif Standard: [TIFF image data, big-endian, direntries=7, orientation=upper-left, xresolution=98, yresolution=106, resolutionunit=2, software=Adobe Photoshop CS2 Windows, datetime=2008:04:02 00:23:04], baseline, precision 8, 320x300, frames 3

这篇关于Python将字节字面量转换为图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆