如何在不保存的情况下将图像 PIL 转换为 Base64



我用 Python 生成一个图像,我需要将此 Pil 图像转换为 Base64,而无需将此图像保存到任何文件夹中......

有一些数据,我得到 RGB img 如下行:

img = Image.fromarray(data,'RGB')

将此 PIL 转换为 base64 的简单方法是什么?(我无法打开文件图像,因为我不能保存 img(?

谢谢你的帮助

使用Node JS,我可以通过以下行获得正确的base64:

pythonShell= require("python-shell");
app.post('/index/gen/',urlencodedParser, function (req,res){ 
  pythonShell.run('minigen.py', function (err, results) {
  if (err) throw err; 
  var img = base64img.base64Sync('./images/miniature.jpg');
  res.send(img); }); 
}) 

但是如果我使用 NodeJS,我必须保存文件...

这是从图像生成矩阵的代码,你不需要知道数据中有什么;)

image = Image.open("./carte/"+fichier)              
image = image.resize((400,400),Image.ANTIALIAS)     
w,h = image.size                                    
tab = numpy.array(image)                            
data = numpy.zeros((h, w, 3), dtype=numpy.uint8)

我找到了解决方案。希望这有帮助!

img = Image.fromarray(data, 'RGB')                  #Crée une image à partir de la matrice
buffer = BytesIO()
img.save(buffer,format="JPEG")                  #Enregistre l'image dans le buffer
myimage = buffer.getvalue()                     
print "data:image/jpeg;base64,"+base64.b64encode(myimage)

@florian答案对我帮助很大,但 base64.b64encode(img_byte( 返回字节,所以我需要在连接之前将其解码为字符串(使用 python 3.6(:

def img_to_base64_str(self, img):
    buffered = BytesIO()
    img.save(buffered, format="PNG")
    buffered.seek(0)
    img_byte = buffered.getvalue()
    img_str = "data:image/png;base64," + base64.b64encode(img_byte).decode()
你可以

像这样使用base64库:

import base64
base64.b64encode(img.tobytes())

请参阅tobytes() Image对象的方法。

或者你可以使用这样的东西:

import glob
import random
import base64
from PIL import Image
from io import BytesIO
import io

def get_thumbnail(path):
    path = "\\?\"+path # This "\\?\" is used to prevent problems with long Windows paths
    i = Image.open(path)    
    return i
def image_base64(im):
    if isinstance(im, str):
        im = get_thumbnail(im)
    with BytesIO() as buffer:
        im.save(buffer, 'jpeg')
        return base64.b64encode(buffer.getvalue()).decode()
def image_formatter(im):
    return f'<img src="data:image/jpeg;base64,{image_base64(im)}">'

只需在函数中传递图像get_thumbnail路径并image_formatter以HTML显示即可

最新更新