[英]How to convert Image PIL into Base64 without saving
我用Python生成了一個圖像,我需要將此Pil Image轉換為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()
或者你可以使用這樣的東西:
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 中顯示它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.