Re: OT? plpython2u

Поиск
Список
Период
Сортировка
От Nahum Castro
Тема Re: OT? plpython2u
Дата
Msg-id CABqArLjo6RXjsQk6bYJEL8zG4+BtibCkXzq==xc4OXJQj+zcrg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: OT? plpython2u  (Adrian Klaver <adrian.klaver@aklaver.com>)
Ответы Re: OT? plpython2u  (Adrian Klaver <adrian.klaver@aklaver.com>)
Список 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.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.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)1274694

В списке psycopg по дате отправления:

Предыдущее
От: Adrian Klaver
Дата:
Сообщение: Re: OT? plpython2u
Следующее
От: Adrian Klaver
Дата:
Сообщение: Re: OT? plpython2u