如何使用 pillow 库使用 pl python 访问图像并保存在 postgresql bytea 列上?
How to access images with plpython using the pillow libary and saving on postgresql bytea column?
我在访问从存储为 bytea 的数据库处理的图像时遇到问题,这是我调整图像大小的 pl。
CREATE OR REPLACE FUNCTION public.ajustar(randstring bytea)
RETURNS bytea
LANGUAGE plpythonu
AS $function$
from io import BytesIO
import PIL
from PIL import Image
basewidth = 300
mem_file = BytesIO()
mem_file.write(randstring)
img = Image.open(mem_file)
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize), PIL.Image.ANTIALIAS)
img.close()
return img
$function$;
所以我的问题是返回一个 bytea 但得到一个地址,我怎样才能得到图像而不是地址?。它工作的唯一方法是将 img 保存到一个文件 img.save('/home/postgres/imagen.jpg')
,而不是我需要放入一个对象来替换数据库中的图像。
pruebas=# select encode(ajustar(foto), 'escape') from personal where id=193;
encode
------------------------------------------------------------
<PIL.Image.Image image mode=RGB size=300x347 at 0x1895990>
(1 fila)
提前致谢
使用此功能,您可以处理数据库中的图像(jpeg 格式)。
这是用 plpython 制作的,如果您正在使用 Linux,请使用
更新 Centos 7 上的枕头库
$sudo pip install Pillow
或
$sudo pip update Pillow
这是函数。
CREATE FUNCTION ajustar(randstring bytea) RETURNS bytea
LANGUAGE plpythonu
AS $$
from io import BytesIO
import PIL
from PIL import Image
basewidth = 300
mem_file = BytesIO()
mem_file.write(randstring)
img = Image.open(mem_file)
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize), PIL.Image.ANTIALIAS)
salida = BytesIO()
img.save(salida, format='JPEG')
hex_data = salida.getvalue()
img.close()
return hex_data
$$;
我在访问从存储为 bytea 的数据库处理的图像时遇到问题,这是我调整图像大小的 pl。
CREATE OR REPLACE FUNCTION public.ajustar(randstring bytea)
RETURNS bytea
LANGUAGE plpythonu
AS $function$
from io import BytesIO
import PIL
from PIL import Image
basewidth = 300
mem_file = BytesIO()
mem_file.write(randstring)
img = Image.open(mem_file)
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize), PIL.Image.ANTIALIAS)
img.close()
return img
$function$;
所以我的问题是返回一个 bytea 但得到一个地址,我怎样才能得到图像而不是地址?。它工作的唯一方法是将 img 保存到一个文件 img.save('/home/postgres/imagen.jpg')
,而不是我需要放入一个对象来替换数据库中的图像。
pruebas=# select encode(ajustar(foto), 'escape') from personal where id=193;
encode
------------------------------------------------------------
<PIL.Image.Image image mode=RGB size=300x347 at 0x1895990>
(1 fila)
提前致谢
使用此功能,您可以处理数据库中的图像(jpeg 格式)。 这是用 plpython 制作的,如果您正在使用 Linux,请使用
更新 Centos 7 上的枕头库$sudo pip install Pillow
或
$sudo pip update Pillow
这是函数。
CREATE FUNCTION ajustar(randstring bytea) RETURNS bytea
LANGUAGE plpythonu
AS $$
from io import BytesIO
import PIL
from PIL import Image
basewidth = 300
mem_file = BytesIO()
mem_file.write(randstring)
img = Image.open(mem_file)
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize), PIL.Image.ANTIALIAS)
salida = BytesIO()
img.save(salida, format='JPEG')
hex_data = salida.getvalue()
img.close()
return hex_data
$$;