Re: OT? plpython2u - Mailing list psycopg
From | Nahum Castro |
---|---|
Subject | Re: OT? plpython2u |
Date | |
Msg-id | CABqArLjo6RXjsQk6bYJEL8zG4+BtibCkXzq==xc4OXJQj+zcrg@mail.gmail.com Whole thread Raw |
In response to | Re: OT? plpython2u (Adrian Klaver <adrian.klaver@aklaver.com>) |
Responses |
Re: OT? plpython2u
|
List | psycopg |
Oh, Awesome.
Thanks a lot.
Nahum.
2016-10-20 14:47 GMT-05:00 Adrian Klaver <adrian.klaver@aklaver.com>:
On 10/20/2016 12:03 PM, Nahum Castro wrote:
2016-10-20 13:06 GMT-05:00 Jonathan Rogers <jrogers@socialserve.com
<mailto:jrogers@socialserve.com>>:
On 10/20/2016 01:14 PM, Nahum Castro wrote:
> Hello all.
>
> I need to process images on my database, they are stored on a bytea column.
>
> The process consist on scaling and I have done this so far:
>
> CREATE OR REPLACE FUNCTION ajustar(randstring bytea)
> RETURNS bytea AS
> $$
> import PIL
> from PIL import Image
> basewidth = 300
> img = randstring
> wpercent = (basewidth/float(img.size[0]))
> hsize = int((float(img.size[1])*float(wpercent)))
> img = img.resize((basewidth,hsize), PIL.Image.ANTIALIAS)
>
> return img
> $$
> LANGUAGE 'plpython2u' VOLATILE;
As you probably know, Postgres procedural languages are server-side
extensions and therefore have nothing to do with psycopg, which is a
client-side library.
Thanks, but rather than help in plpython is how to pass the variable
bytea from postgres to an image in python.
>
> The objective of this pl is read the bytea from the database, scale,
> then replace the scaled image in the database, but I don't know what
> type use to pass to the variable img.
AFAICT, if you pass a bytea value to a plpythonu function, it will
receive a Python str object.
That is where i get confused, what is stored in the db is in bytea, how
I do to transform in a str?
It is done for you:
https://www.postgresql.org/docs/9.5/static/plpython-data.htm l#AEN65498
"PostgreSQL bytea is converted to Python str in Python 2 and to bytes in Python 3. In Python 2, the string should be treated as a byte sequence without any character encoding.
When the PostgreSQL return type is bytea, the return value will be converted to a string (Python 2) or bytes (Python 3) using the respective Python built-ins, with the result being converted to bytea."
So something like this:
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)
return img
$function$
postgres@test=# select ajustar(barcode) from pict_test where full_upc = '744835000544';
ajustar
------------------------------------------------------------ ------------------------------ ------------------------------ ----------
\x3c50494c2e496d6167652e496d61676520696d616765206d6f64653d52 47422073697a653d33303078323039 206174203078374639334331453233 3635303e
(1 row)
barcode are small png's in this case.
>
> This is the query.
> update personal set foto=ajustar(encode(foto, 'hex')::bytea);
Why are you encoding the binary data into a textual representation? What
image format is stored in column "foto"? Depending on the format, you
probably want to use one of these constructors in function "ajustar":
Sorry I forgot, all images are in jpeg format.
http://pillow.readthedocs.io/en/3.4.x/reference/Image.html?h ighlight=Image#PIL.Image.froms tring
<http://pillow.readthedocs.io/en/3.4.x/reference/Image.html? highlight=Image#PIL.Image.from string>
http://pillow.readthedocs.io/en/3.4.x/reference/Image.html?h ighlight=Image#PIL.Image.open
<http://pillow.readthedocs.io/en/3.4.x/reference/Image.html? highlight=Image#PIL.Image.open >
Again thanks.
Nahum
--
Jonathan Rogers
Socialserve.com by Emphasys Software
jrogers@emphasys-software.com <mailto:jrogers@emphasys-software.com>
--
Jonathan Rogers
Socialserve.com by Emphasys Software
jrogers@emphasys-software.com <mailto:jrogers@emphasys-software.com>
--
Sent via psycopg mailing list (psycopg@postgresql.org
<mailto:psycopg@postgresql.org>)
To make changes to your subscription:
http://www.postgresql.org/mailpref/psycopg
<http://www.postgresql.org/mailpref/psycopg>
--
*Nahum Castro González*
Blvd. Perdigón 214, Brisas del Lago.
CP 37207
León, Guanajuato, México
Tel (477)1950304
Cel (477)1274694
--
Adrian Klaver
adrian.klaver@aklaver.com
--
Nahum Castro González
Blvd. Perdigón 214, Brisas del Lago.
CP 37207
León, Guanajuato, México
Tel (477)1950304
Cel (477)1274694Blvd. Perdigón 214, Brisas del Lago.
CP 37207
León, Guanajuato, México
Tel (477)1950304