Re: OT? plpython2u
От | Adrian Klaver |
---|---|
Тема | Re: OT? plpython2u |
Дата | |
Msg-id | 8b1a5964-6f8a-ae00-2030-e249ef04eed0@aklaver.com обсуждение исходный текст |
Ответ на | Re: OT? plpython2u (Nahum Castro <nahumcastro@gmail.com>) |
Список | psycopg |
On 10/20/2016 12:52 PM, Nahum Castro wrote: > Oh, Awesome. > > Thanks a lot. FYI, I forgot to close the mem_file in the example I sent. > > Nahum. > > 2016-10-20 14:47 GMT-05:00 Adrian Klaver <adrian.klaver@aklaver.com > <mailto: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> > <mailto: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.html#AEN65498 > <https://www.postgresql.org/docs/9.5/static/plpython-data.html#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 > ---------------------------------------------------------------------------------------------------------------------------------- > > \x3c50494c2e496d6167652e496d61676520696d616765206d6f64653d5247422073697a653d333030783230392061742030783746393343314532333635303e > (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?highlight=Image#PIL.Image.fromstring > <http://pillow.readthedocs.io/en/3.4.x/reference/Image.html?highlight=Image#PIL.Image.fromstring> > > <http://pillow.readthedocs.io/en/3.4.x/reference/Image.html?highlight=Image#PIL.Image.fromstring > <http://pillow.readthedocs.io/en/3.4.x/reference/Image.html?highlight=Image#PIL.Image.fromstring>> > > > http://pillow.readthedocs.io/en/3.4.x/reference/Image.html?highlight=Image#PIL.Image.open > <http://pillow.readthedocs.io/en/3.4.x/reference/Image.html?highlight=Image#PIL.Image.open> > > <http://pillow.readthedocs.io/en/3.4.x/reference/Image.html?highlight=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> > <mailto: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> > <mailto:jrogers@emphasys-software.com > <mailto:jrogers@emphasys-software.com>> > > > -- > Sent via psycopg mailing list (psycopg@postgresql.org > <mailto:psycopg@postgresql.org> > <mailto: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> > <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 <mailto: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)1274694 -- Adrian Klaver adrian.klaver@aklaver.com
В списке psycopg по дате отправления: