Package: photocollage Version: 1.4.3-2.2 Severity: normal Tags: patch pending sid booksworm
Dear maintainer, I've prepared an NMU for photocollage (versioned as 1.4.5-0.1) and uploaded it to DELAYED/14. Please feel free to tell me if I should delay it longer. Regards. diff -Nru photocollage-1.4.3/data/photocollage.appdata.xml photocollage- 1.4.5/data/photocollage.appdata.xml --- photocollage-1.4.3/data/photocollage.appdata.xml 2016-05-17 15:51:10.000000000 -0400 +++ photocollage-1.4.5/data/photocollage.appdata.xml 2021-07-09 11:08:13.922905000 -0400 @@ -7,8 +7,11 @@ <summary>Graphical tool to make photo collage posters</summary> <summary xml:lang="cs">Grafický nástroj pro vytváření koláží z fotografií</summary> <summary xml:lang="de">Grafisches Werkzeug zum erstellen von Foto-Collagen Poster</summary> + <summary xml:lang="es">Herramienta gráfica para hacer póster de collage de fotos.</summary> <summary xml:lang="fr">Outil graphique pour fabriquer des posters en collant plusieurs photos</summary> <summary xml:lang="it">Strumento grafico per creare collage di fotografie</summary> + <summary xml:lang="nl">Grafische toepassing om fotocollageposters te maken</summary> + <summary xml:lang="ru">Графический инструмент для создания фотоколлажа из плакатов</summary> <description> <p> PhotoCollage allows you to create photo collage posters. It assembles the @@ -59,6 +62,23 @@ Webseiten. Jedoch ist es kostenlos und der Quellcode unter einer freien Lizenz erhältlich. </p> + <p xml:lang="es"> + PhotoCollage te permite crear póster de collage de fotos. Reúne las + fotografías de entrada que se le dan para generar un gran póster. Las + fotos se organizan automáticamente para llenar todo el póster, luego + puede cambiar el diseño final, las dimensiones, los bordes o intercambiar + fotos en la cuadrícula generada. Finalmente, la imagen final del póster + se puede guardar en cualquier tamaño. + </p> + <p xml:lang="es"> + El algoritmo genera diseños aleatorios que colocan fotos mientras + aprovechan todo el espacio libre. Intenta llenar todo el espacio + manteniendo cada foto lo más grande posible. + </p> + <p xml:lang="es"> + PhotoCollage hace más o menos lo mismo que muchos sitios web comerciales, + pero de forma gratuita y con código de open source. + </p> <p xml:lang="fr"> PhotoCollage permet de créer des posters de photo-collages. Il assemble les photos qu'on lui donne pour générer un grand poster. Les photos sont @@ -93,6 +113,29 @@ PhotoCollage fa più o meno quello che fanno molti siti web commerciali, ma gratuitamente e con codice open source. </p> + <p xml:lang="nl"> + Met PhotoCollage kun je collageposters maken. Alle opgegeven + afbeeldingen worden samengevoegd tot één grote poster: ze worden + automatisch ingedeeld om de gehele poster op te vullen. Daarna kun je de + indeling, afmetingen, randdikte en volgorde aanpassen en de poster opslaan + in elke denkbare grootte. + </p> + <p xml:lang="ru"> + PhotoCollage позволяет создавать фотоколлажа из плакатов. Он собирает + входные фотографии, которые ему выдают, для создания большого плаката. Фотографии + автоматически располагаются так, чтобы заполнить весь плакат, затем вы можете изменить + окончательный макет, размеры, границы или поменять местами фотографии в сгенерированной сетке. + В конечном итоге окончательное изображение плаката может быть сохранено в любом размере. + </p> + <p xml:lang="ru"> + Алгоритм генерирует случайные макеты, которые размещают фотографии, + используя при этом все свободное пространство. Он пытается заполнить все пространство, + сохраняя при этом каждую фотографию как можно большего размера. + </p> + <p xml:lang="ru"> + PhotoCollage делает более или менее то же самое, что и многие коммерческие веб-сайты, + но бесплатно и с открытым исходным кодом. + </p> </description> <screenshots> <screenshot type="default" width="800" height="450"> diff -Nru photocollage-1.4.3/data/photocollage.desktop photocollage- 1.4.5/data/photocollage.desktop --- photocollage-1.4.3/data/photocollage.desktop 2016-05-17 15:51:10.000000000 -0400 +++ photocollage-1.4.5/data/photocollage.desktop 2021-07-09 11:08:13.922905000 -0400 @@ -13,6 +13,10 @@ Keywords[de]=Fotos;Bilder;Poster;Plakate;Zusammenstellung;Collage,Photo;Image; Comment[de]=Ein grafisches Werkzeug zum Erstellen von Fotocollage-Postern aus mehreren Bildern +Name[es]=PhotoCollage +Keywords[es]=foto;collage;carteles;imágenes;imagen;fotografía;fotografías;pós ter; +Comment[es]=Herramienta gráfica para hacer carteles de collage de fotos a partir de múltiples imágenes. + Name[fr]=PhotoCollage Keywords[fr]=photo;collage;image; Comment[fr]=Outil graphique pour fabriquer des posters en collant plusieurs photos @@ -20,3 +24,11 @@ Name[it]=PhotoCollage Keywords[it]=foto;collage;immagine;fotografia;fotografie;immagini;poster; Comment[it]=Utilità grafica per creare poster da collage di fotografie + +Name[nl]=PhotoCollage +Keywords[nl]=foto;collage;afbeelding;fotografie;poster; +Comment[nl]=Grafische toepassing om fotocollageposters samen te stellen uit meerdere afbeeldingen + +Name[ru]=PhotoCollage +Keywords[ru]=фотография;коллаж;изображение; +Comment[ru]=Графический инструмент для создания плаката фотоколлажа из нескольких изображений diff -Nru photocollage-1.4.3/debian/changelog photocollage- 1.4.5/debian/changelog --- photocollage-1.4.3/debian/changelog 2021-01-20 10:18:47.000000000 -0500 +++ photocollage-1.4.5/debian/changelog 2021-09-30 09:51:44.000000000 -0400 @@ -1,3 +1,14 @@ +photocollage (1.4.5-0.1) unstable; urgency=medium + + * Non-maintainer upload. + * New upstream release 1.4.5. + * Bump Standards-Version to 4.6.0. + * Bump debhelper compat to v13. + * debian/control: Add Vcs-* fields to use git packaging repo on + Salsa Debian GitLab. + + -- Boyuan Yang <by...@debian.org> Thu, 30 Sep 2021 09:51:44 -0400 + photocollage (1.4.3-2.2) unstable; urgency=medium * Non-maintainer upload. diff -Nru photocollage-1.4.3/debian/compat photocollage-1.4.5/debian/compat --- photocollage-1.4.3/debian/compat 2021-01-20 10:18:02.000000000 -0500 +++ photocollage-1.4.5/debian/compat 1969-12-31 19:00:00.000000000 -0500 @@ -1 +0,0 @@ -9 diff -Nru photocollage-1.4.3/debian/control photocollage-1.4.5/debian/control --- photocollage-1.4.3/debian/control 2021-01-20 10:18:41.000000000 -0500 +++ photocollage-1.4.5/debian/control 2021-09-30 09:51:07.000000000 -0400 @@ -3,12 +3,14 @@ Priority: optional Maintainer: Adrien Vergé <adrienve...@gmail.com> Build-Depends: - debhelper (>=9), + debhelper-compat (= 13), gettext, - dh-python, + dh-sequence-python3, python3-all, -Standards-Version: 3.9.8 +Standards-Version: 4.6.0 Homepage: https://github.com/adrienverge/PhotoCollage +Vcs-Git: https://salsa.debian.org/debian/photocollage.git +Vcs-Browser: https://salsa.debian.org/debian/photocollage Package: photocollage Architecture: all diff -Nru photocollage-1.4.3/debian/rules photocollage-1.4.5/debian/rules --- photocollage-1.4.3/debian/rules 2021-01-20 10:18:02.000000000 -0500 +++ photocollage-1.4.5/debian/rules 2021-09-30 09:51:14.000000000 -0400 @@ -1,4 +1,4 @@ #!/usr/bin/make -f %: - dh $@ --with python3 --buildsystem=pybuild + dh $@ --buildsystem=pybuild diff -Nru photocollage-1.4.3/photocollage/artwork.py photocollage- 1.4.5/photocollage/artwork.py --- photocollage-1.4.3/photocollage/artwork.py 2016-05-17 15:51:10.000000000 -0400 +++ photocollage-1.4.5/photocollage/artwork.py 2020-09-24 08:20:02.075167200 -0400 @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright (C) 2014 Adrien Vergé # # This program is free software; you can redistribute it and/or modify @@ -30,85 +29,67 @@ # for i in range(0, len(encoded_image), n): # print(' "' + encoded_image[i:i+n].decode('ascii') + '"') ICON_DRAG_AND_DROP = ( - "iVBORw0KGgoAAAANSUhEUgAAAJ4AAABmCAQAAACQTeCEAAAQiklEQVR42t2dzY8lV3nGf+NpX" - "GNMqoHQZDCnvMAYIZqQXXRLIlYUJLxgkdXdJNlkkShS2IwXyH8CYjHDig17JHRXLJBAIBSNkO" - "pGLFCQxyILy5br2LLTUewuWzE1TLtZ1KlT7/mqW7fu7Q/5SD19b3V9nHrO+/m8b9Xc+O45lzT" - "e4gk+OuMDbvPYZV3s/Y8UdPAE73NwueB9wny7mdjrzP71zO5zZvc/Sx4XO9PNjVtSM7gprhn7" - "+wHvwmWC140n7acssUcLZLRin1Z8yna49nZHt4lZdrN5F+CywRuAacXUWrtVTrzfZzfAUt8yb" - "8uwYO3Es10BeG30cztJXrLZsI3/PfMWbIp2XAl48bWNr3e3dZ6yZtHb9a8TLkw7Ap1/9BWA56" - "50Sk6y5F+zGVYsC+xpSrKyDdKaXS143S1nEchS6pM25S4c2SQIs5nGJguOPbgaudu88tNtVht" - "Rzoux09nVOoxsL3tu8ovtllcc88Jj40ps3r6WIKX6RNQ/G5GgzBqTNgibxuzytQOv3VLtsgnb" - "W2vt/Ogy7oamjh3AO+fGpQO4a9iS9tTnPNz6vDuA9xaPttr/j8BL19YUfJzPR01BNmJrZ4P33" - "pbQXffx/3zAJyc4GWkRZ4P3PgC3OZ+QyGSOmsxL9MN928meNBs1BPAErwH/Z8HbFCfuKT37rP" - "2UJ/ZogJxG7NOIT/kO197u6CYxy242r82yoTt72x6YRkytsVvlxPt9dgMs9S33tgwL1kw82/Z" - "jZ/Ca6Odmkrzks2Eb/3vuLdgU7bgS8OJrG1/vbus8Zc2jt+tfJ1yYZgS6fAvY2kjiuJcgOR9V" - "qHDqqRueDmse2NOUZOUbpHXqFWOx4h7A6245j0CWUp+0KXfhyCdBmM80NvnMY/estlNWfrrNa" - "iLKud+RPm8rCLMLBy/fy56b/GKz5RXHvHB6POQEyA17PaV6ci2IgTxpO0PJbSL75lFz0f3bJB" - "clZpezrcLwCwev2VLt8gnbG2vt/Ogy7oamjccF09znJSdkI7O/lI6BZpJCzrOyedJTN1ufvQ0" - "SsSNaTmgSFZeD3eWKCQ6jSYYhzZ7cQZ5IxPIRm+nb2hi/d0QDtDTWCjpx3i683HiY2QRTzWc7" - "nKnj3IFt81XcO2gjpZ7McswdhEeyY+AN9Oyp/vjaUUvHfHVLaXXhyywV33oqDBkNR9JhvLcDd" - "NdxPOA2n5ml8mc2xnP7VLptrwDP+KXHTgD/ig8npM65o4rzqKWYYZ8au+UjvrsBPsV94C0en2" - "USbiZqGgAnwlGc+A7j2O6mEqfWgDJSqsSW7pPaQVa2O1onZtnN5r69xe2t6RmNI239ohwZW9d" - "dI8ok98BoMTVtt8qJ9/vsBljqm/K2DAumJ54tmyjJfvj90ITFmVO2bNGJ5iQBno5ORk+SFzUb" - "tvG/K2/BpmjH/Iz8cS8h23y2A4I1hvFt/dZ5yqqit+tfJ1wYPQKd2ovTO7Ny1Y526SXSMzWqU" - "OHUUzc8HVYV2NOUZKkN0qqSuc1U6umhyCTabcHrbllFIEupT9qUu3CoSRDOkeMeNuUA1l/3FC" - "gMez2letI6lECnxDI1OyLnBGj5IFTbKSs/3WbpiHLud8TP+wdOATikCMj7cfgyWjJy4zQyAxT" - "AM2hachrhkS14aqbNisuenugMtnEuarJLuMWho6q5iBIfcJi88idE9tCC42VPRI/qnmsYPiAp" - "1Sei/mpEMpU1JjoIm9J2ObfnaQSAHXzHPOCUQ0+FmyiLl9FRo43ZllvpPOLt7cDTW6qdmrBdW" - "2vnR5dxNzSfaRk+H6OBhhqMhDbW27bC8rUWrBxJi+aczCt6pwHcNWwZ89S7hCFNpNSTm+8Np9" - "TAsekYuGkCFBcsP+PIxPwOxoOO0ObovcI3BqgeNQVqoq3NLRXfeFwK5NQiMfXJgCFkcSt7mS9" - "542GmDqaqtnAj+7Cgm68S3sEgcyE9mvNz4Pmo95WNSBLG3CEJvNx2O/W6TkNF4ctHvr0sHMUD" - "8/ssaA3PbK7RWkXOTQizwebpawrV5kWWlTMfOs1XjLuAinEuvBU/kuVTvC7BWwuWRF8D+LSwc" - "dvOoaHmEDjlkIZcwNMAp1SJ5qSzCdXa6BNAdcJu6CtQVr1jVpJRGNBcZa0mHp963rHfGmQYhf" - "WkakMuoPdCgM7NYcaMixZ8Xg5o0Ts4pR/qcQN1ayxcn6SlQbU2r6YQxKMameSaxTVyHTFn1tm" - "6WkB2OrGGe+LYuozWZLoDbLIQYMErbSxVU7DwgNMoC1oVgHsVyp0eNe9RePasITf5RC22HqN4" - "GTjlHSu1PZciQWzM9kwELB4xoIJ0SdvfA1yrnRVtnh3UAfU0DmAfIOcUxmnkvGxheZ6KBoWmd" - "uDIbEDSgXdiwuQ22CNgVZQTM60MdLW1iNrYR2W8cypdm2MPdSC/2oGiNOz1tOpJ4e3TgONlXx" - "Y9qk00Deu+HVmLGaNJD+JypC0whVnFIUFSATuihC3sYd6mQKSpjKL5kHVAlAmnFR+f5dloW9C" - "hoUZr4JTcXDGn4Zjf0b8cIsas9EWhZ3glxSS7o7LqqhzoCqHivVJ3sNUGPCVIpOnQKS/V8nVB" - "Lp5mFdhlKS9uT17vcbt5dYTVED4XPLCf2wh8MjxpOSITy3uwmdrEKowGK11uSrQ2LifG341Du" - "DZ+XgX1uEVE0voFW7Kyx6X4l14lVYRDlhxLP++b3sM2sfguA4789MyPllaJCfX0pIowHimY1u" - "JolYBOmoHOUS0SDqn/vGRtpBbvDDKc8NOzxsI5SHHuuYwUN5gJyXZeDbKykyqorcyVgaVR1p7" - "piDKt7S3HXEkd7F95pl07riN0J8qL63oDUlMBS6djIN4WImHsz/TApmfTiVUHvKW5keHGywmK" - "59fINCsL+HCzygNmgWKNFooecnWhHCtLxWvCCKFiGchOmMHmNtcYSANFbuDrepJjDzW3DkWVh" - "6FKaQJkKD31kvZmLaDRCbp0kAgdOcOmLEYl+UMVoUcLXgDueqXHZqQZqCF8Hq7k1wyNPmNvL+" - "hiPw+8FYVNnYtIrKXsDWtHhV37pbzStXZkd+GFO9q5TkVplV6NhODut5UwCCtzvT9wyqkJTTZ" - "Va5uEc4D4O1j6LR+4DkOz5I4x4SpSR3CjPLXh5rR37BjR0El8mcynteNth6VaGlsH95yl6uq1" - "jReq5ElLljveVgKVJYGN0vDayxxUIj2KcbeSbZG9TWrEZvawLKP+ucttagpP0jVQczfRnJQZS" - "KSH7cuNTbJ32X1rWZskpCJdUqUDjJpYucCLzmIyqZKVkD5q1E6GsjZ214VeHnlvAh2aO55U2r" - "nCwpoH95UFZe1BfbNI/4oneUPAchfNnWTqv7KyMlaf1RHKqINqTS0CoRV30FQsWFOx9I5ZO3o" - "xpRA5SNOh5fY6Yqr7qc32XAQsJAPkNpDFzA+SK6E8a7O6YQ/emgrFMhoS6w3GvTfqJed8HLeH" - "oLv+PZHcDf9WArJ6yypubgOS7tsDYwvlk5KHHijhm1raBBlvJa8QUnfP3lbJSsjC2kSDBbCiZ" - "BF4zOVIMrY2t17zJt+xr3fozikzmhWFBayMVFUKA+mwdUnJCqh5dSS07dotOhtaC3fSOKBkkT" - "cS+G+4CDoGBkbkniAHKvO7k7XKAN3Xnmo0JQsTpCijgGtgIVKs7jhfYr7G73k3WlnQIoqshO0" - "rURTUFKzs3+9yF01JRWWXrbV9AuGTvDlQkHNIAzzPz8V13zMdKNPHgaTWB9hKkbDhAOrnvT3A" - "d8zt3BPq1aVOYVHpMeD7vMCveMmqVOGoew936XEnNThedmVkWeYorYWqiTqRXKRrx+STC0P+u" - "N2DV1n2rJ/+cuNJleX6tAhR4/SCtIEFnwP+hx/wbb7E170rY0MX34ZqAXNp5Lm2GbhCs+RHyC" - "4pSPXk5eLn2PjkRyb0nQrdebyhO9V+URqDPhCki5Gs16+9Drf0CDjjTX7Iv/Lb5CMn8aY0zcL" - "kKgvHpbm6krJ6kmseJLHgNeBJbm8leTe48e/nbwAf80BSJnPE2LV6rxWJRzzJv5Fxiy/wz7zN" - "Qxgh9XFSuvE6xveAwj5ANf1ZjF8DB3xuns1zV3zhkUh1klvRicRLR1O4ft8PeZYzznjE6/yIf" - "+S/eZawlTGW6aggxMY4KNnzIJf60MR22Gy36yXo477DHcpXUcnrFLSyClpYB1B4BFItjqgcpe" - "iP6z8N6Zai5m/5F25yi1tkfJklNU9FWOxQfVVAV2gnjPoj8EWeddzF6QQY3tlF8u6IFa1tUDL" - "Uy0rjEnoIKzv50qFRh8RKOXSlskHPAEYnewe8wk/4e17izyLEa0gyuNTWEKwvUNGy6CBvsXew" - "NAK82ZL3HUdq7tpJFg7ztraQVZSBldpkj4bSYSd5cMAtI31/yfP8TMCnti6kd4B+D/gif5F46" - "0B6/G5fNq/2OI5hLATAakIyFnrPbp+nhOx10vd7DvgmP6MxKl4Js1AkydOx0o8LV5PMgXd5n9" - "TB+GSUl4BtJw2bxjlnfMi3+XNDCX2LVw1UC0Hy6wlXVw43InvgQ4Byy7BcyIu4tCXkU7TnYi/" - "gHXLMf/GffIMDU4Apgqspx8PGypRxUBuPvfPZ423f1TICnt++r5ykf703uOT4FC/yMV6i4u94" - "jd/gVn5don7lWU0tKi3Km2PrtW6Hb2ppJpDxW4C3cpIu5QWmXSJUOmVw5YUQUyiqfp8bwKd5k" - "Rvc5Dn+g4q/pox02inHxirrsmrzU5nthe1WIIAtjzwfvum1EVuCV1KzFGmXSzwqwXMoEef16p" - "0eS0MW+MD+Ey/yv7zJgm9yn/s8x2dG28aVDUi6byuHexkiA4C3t8pRpQWeCd5ChLzStnTfC6+" - "xQbZfIDiR2kpPaaK6tTmrprR/LznnnJ+aI57h69znTd53CNJUnjvQFl24VAl3suszt0/NBW9t" - "K1HK0J3KqyLIp7+GULU28V4fvymv26kWAVBhb/ucX1i4X+Fv+DLv8Evzioih3B5rKZMNQB2/p" - "4G7vCBu6bEZD9Sd89SM98uYIPkf6EvehVPj19Ey5BDju13MSnTZxZ6EdWtm/XEfcoM3LNBFog" - "ISl0LNynCJinsmPfu847MvcjidocrJHrXhgxWILhQXGLeVohLgj/MjbneB+5h07eU1sXjAj+8" - "UsEykZxcOnp+C9x1zC6F+C49X67/VlhpY2NBGQaRxgsAd6aB5JxUUpRajFIxLyf1LBc+o7XNO" - "BltFCCYieWcRjfDdvr6xjCTWaaWE+VcTEz+Xz7t0ta0Ymmi1F1tNHeELFqa8VEF7XLGUa5fkk" - "o220gn1GfACrkZtJY1YzpqGTsoTiZ6nzZLpsnfSc8c+1VcF3nKjhGymhGLWSW2sTMQeqU9VHV" - "yzQeQMr16dw0jTPJubs0OedwzgaU+Whc9epJzQ1TxAc5CWL+XdgI7Qj+7Kb/Oqo5RU6kggsun" - "1TNOl98IkT0eDUDX63rAxSGIvptnca6WSLHHc66s9JGZ7chguZCoarigPVB1IajpYUQlToJJ2" - "VkcZG6LSrq5Sbf3sNf2wkopYOB39rZIxHRvea5DyuiQcx+WrrujP05GXC8YJKj/k8ANjN2lTi" - "Q7O2Jvx1Iiyq0Q1eLuoYK/gndvI/KMyLu3/2eaxp/mojacvU/IWvH5h/4PZ5Uvd0xf4/7H540" - "/8mFbafV794AAAAABJRU5ErkJggg==") + "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" + "U4Z3kUZTSagAAAAASUVORK5CYII=") def load_pixbuf(encoded): diff -Nru photocollage-1.4.3/photocollage/collage.py photocollage- 1.4.5/photocollage/collage.py --- photocollage-1.4.3/photocollage/collage.py 2016-05-17 15:51:10.000000000 -0400 +++ photocollage-1.4.5/photocollage/collage.py 2020-09-24 08:20:02.075167200 -0400 @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright (C) 2014 Adrien Vergé # # This program is free software; you can redistribute it and/or modify @@ -77,19 +76,34 @@ """ -class Photo(object): +class Photo: def __init__(self, filename, w, h, orientation=0): self.filename = filename self.w = w self.h = h self.orientation = orientation + self.offset_w = 0.5 + self.offset_h = 0.5 @property def ratio(self): return float(self.h) / float(self.w) + def move(self, x, y): + self.offset_w = self.calculate_new_offset(self.offset_w, x) + self.offset_h = self.calculate_new_offset(self.offset_h, y) + + @staticmethod + def calculate_new_offset(offset, value): + new_offset = offset + value + if new_offset < 0: + new_offset = 0 + elif new_offset > 1: + new_offset = 1 + return new_offset -class Cell(object): + +class Cell: """Represents a cell in a column Properties: @@ -230,7 +244,7 @@ pass -class Column(object): +class Column: """Represents a column in a page Properties: @@ -301,7 +315,7 @@ # First, make groups of "movable" cells. Since cell extents are not # movable, these groups only contain pure cell objects. We only resize # those groups. - class Group(object): + class Group: def __init__(self, y): self.y = y self.h = 0 @@ -328,7 +342,7 @@ c.h = c.h * alpha -class Page(object): +class Page: """Represents a whole page Properties: diff -Nru photocollage-1.4.3/photocollage/gtkgui.py photocollage- 1.4.5/photocollage/gtkgui.py --- photocollage-1.4.3/photocollage/gtkgui.py 2016-05-17 15:51:10.000000000 -0400 +++ photocollage-1.4.5/photocollage/gtkgui.py 2020-09-24 08:20:02.076167300 -0400 @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright (C) 2013 Adrien Vergé # # This program is free software; you can redistribute it and/or modify @@ -22,16 +21,17 @@ import os.path import random import sys +import urllib import cairo import gi -gi.require_version('Gtk', '3.0') # noqa -from gi.repository import Gtk, Gdk, GObject -from six.moves import urllib # Python 2 backward compatibility from photocollage import APP_NAME, artwork, collage, render from photocollage.render import PIL_SUPPORTED_EXTS as EXTS +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk, Gdk, GObject, GdkPixbuf # noqa: E402, I100 + gettext.textdomain(APP_NAME) _ = gettext.gettext @@ -116,7 +116,7 @@ return my_fn -class UserCollage(object): +class UserCollage: """Represents a user-defined collage A UserCollage contains a list of photos (referenced by filenames) and a @@ -158,11 +158,11 @@ TARGET_TYPE_URI = 2 def __init__(self): - super(PhotoCollageWindow, self).__init__(title=_("PhotoCollage")) + super().__init__(title=_("PhotoCollage")) self.history = [] self.history_index = 0 - class Options(object): + class Options: def __init__(self): self.border_w = 0.01 self.border_c = "black" @@ -282,14 +282,11 @@ dialog.destroy() def choose_images(self, button): - dialog = Gtk.FileChooserDialog(_("Choose images"), - button.get_toplevel(), - Gtk.FileChooserAction.OPEN, - select_multiple=True) - dialog.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) - dialog.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK) - - set_open_image_filters(dialog) + dialog = PreviewFileChooserDialog(title=_("Choose images"), + parent=button.get_toplevel(), + action=Gtk.FileChooserAction.OPEN, + select_multiple=True, + modal=True) if dialog.run() == Gtk.ResponseType.OK: files = dialog.get_filenames() @@ -335,7 +332,7 @@ self.btn_save.set_sensitive(True) def on_fail(exception): - dialog = ErrorDialog(self, "%s:\n\n%s" % ( + dialog = ErrorDialog(self, "{}:\n\n{}".format( _("An error occurred while rendering image:"), exception)) compdialog.destroy() dialog.run() @@ -420,7 +417,7 @@ compdialog.destroy() def on_fail(exception): - dialog = ErrorDialog(self, "%s:\n\n%s" % ( + dialog = ErrorDialog(self, "{}:\n\n{}".format( _("An error occurred while rendering image:"), exception)) compdialog.destroy() dialog.run() @@ -456,10 +453,10 @@ class ImagePreviewArea(Gtk.DrawingArea): """Area to display the poster preview and react to user actions""" - INSENSITIVE, FLYING, SWAPPING = range(3) + INSENSITIVE, FLYING, SWAPPING_OR_MOVING = range(3) def __init__(self, parent): - super(ImagePreviewArea, self).__init__() + super().__init__() self.parent = parent parse, color = Gdk.Color.parse("#888888") @@ -481,7 +478,7 @@ self.image = None self.mode = self.INSENSITIVE - class SwapEnd(object): + class SwapEnd: def __init__(self, cell=None, x=0, y=0): self.cell = cell self.x = x @@ -493,8 +490,9 @@ def set_collage(self, image, collage): self.image = pil_image_to_cairo_surface(image) - # The Collage object must be deeply copied. Otherwise, swapping photos - # in a new page would also affect the original page (in history). + # The Collage object must be deeply copied. + # Otherwise, SWAPPING_OR_MOVING photos in a new page would also affect + # the original page (in history). # The deep copy is done here (not in button_release_event) because # references to cells are gathered in other functions, so that making # the copy at the end would invalidate these references. @@ -554,7 +552,7 @@ if cell: self.paint_image_border(context, cell) self.paint_image_delete_button(context, cell) - elif self.mode == self.SWAPPING: + elif self.mode == self.SWAPPING_OR_MOVING: self.paint_image_border(context, self.swap_origin.cell, (3, 3)) cell = self.collage.page.get_cell_at_position(self.x, self.y) if cell and cell != self.swap_origin.cell: @@ -598,27 +596,34 @@ else: self.swap_origin.x, self.swap_origin.y = x, y self.swap_origin.cell = cell - self.mode = self.SWAPPING + self.mode = self.SWAPPING_OR_MOVING widget.queue_draw() def button_release_event(self, widget, event): - if self.mode == self.SWAPPING: + if self.mode == self.SWAPPING_OR_MOVING: self.swap_dest.x, self.swap_dest.y = \ self.get_pos_in_image(event.x, event.y) self.swap_dest.cell = self.collage.page.get_cell_at_position( self.swap_dest.x, self.swap_dest.y) if self.swap_dest.cell \ and self.swap_origin.cell != self.swap_dest.cell: + # different cell: SWAPPING self.collage.page.swap_photos(self.swap_origin.cell, self.swap_dest.cell) self.parent.render_from_new_collage(self.collage) + elif self.swap_dest.cell: + # same cell: MOVING + move_x = (self.swap_origin.x - self.x) / self.swap_dest.cell.w + move_y = (self.swap_origin.y - self.y) / self.swap_dest.cell.h + self.swap_dest.cell.photo.move(move_x, move_y) + self.parent.render_from_new_collage(self.collage) self.mode = self.FLYING widget.queue_draw() class SettingsDialog(Gtk.Dialog): def __init__(self, parent): - super(SettingsDialog, self).__init__( + super().__init__( _("Settings"), parent, 0, (Gtk.STOCK_OK, Gtk.ResponseType.OK, Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)) @@ -693,7 +698,8 @@ self.etr_border = Gtk.Entry(text=str(100.0 * parent.opts.border_w)) self.etr_border.connect("changed", self.validate_float) self.etr_border.last_valid_text = self.etr_border.get_text() - self.etr_border.set_width_chars(2) + self.etr_border.set_width_chars(4) + self.etr_border.set_alignment(1.0) box.pack_start(self.etr_border, False, False, 0) label = Gtk.Label("%", xalign=0) box.pack_start(label, False, False, 0) @@ -736,7 +742,7 @@ class ComputingDialog(Gtk.Dialog): """Simple "please wait" dialog, with a "cancel" button""" def __init__(self, parent): - super(ComputingDialog, self).__init__( + super().__init__( _("Please wait"), parent, 0, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)) self.set_default_size(300, -1) @@ -761,14 +767,52 @@ class ErrorDialog(Gtk.Dialog): def __init__(self, parent, message): - super(ErrorDialog, self).__init__(_("Error"), parent, 0, - (Gtk.STOCK_OK, Gtk.ResponseType.OK)) + super().__init__(_("Error"), parent, 0, + (Gtk.STOCK_OK, Gtk.ResponseType.OK)) self.set_border_width(10) box = self.get_content_area() box.add(Gtk.Label(message)) self.show_all() +class PreviewFileChooserDialog(Gtk.FileChooserDialog): + PREVIEW_MAX_SIZE = 256 + + def __init__(self, **kw): + super().__init__(**kw) + + self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) + self.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK) + + set_open_image_filters(self) + + self._preview = Gtk.Image() + # Don't let preview size down horizontally for skinny images, cause + # that looks distracting + self._preview.set_size_request( + PreviewFileChooserDialog.PREVIEW_MAX_SIZE, -1) + self.set_preview_widget(self._preview) + self.set_use_preview_label(False) + self.connect("update-preview", self.update_preview_cb) + + def update_preview_cb(self, file_chooser): + filename = self.get_preview_filename() + if filename is None or os.path.isdir(filename): + self.set_preview_widget_active(False) + return + try: + pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( + filename, + PreviewFileChooserDialog.PREVIEW_MAX_SIZE, + PreviewFileChooserDialog.PREVIEW_MAX_SIZE) + self._preview.set_from_pixbuf(pixbuf) + except Exception as e: + print(e) + self.set_preview_widget_active(False) + return + self.set_preview_widget_active(True) + + def main(): # Enable threading. Without that, threads hang! GObject.threads_init() diff -Nru photocollage-1.4.3/photocollage/__init__.py photocollage- 1.4.5/photocollage/__init__.py --- photocollage-1.4.3/photocollage/__init__.py 2016-05-17 15:51:10.000000000 -0400 +++ photocollage-1.4.5/photocollage/__init__.py 2021-07-09 11:08:02.686839800 -0400 @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright (C) 2013 Adrien Vergé # # This program is free software; you can redistribute it and/or modify @@ -16,7 +15,7 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. APP_NAME = "photocollage" -APP_VERSION = "1.4.3" +APP_VERSION = "1.4.5" __author__ = "Adrien Vergé" __copyright__ = "Copyright 2013, Adrien Vergé" diff -Nru photocollage-1.4.3/photocollage/render.py photocollage- 1.4.5/photocollage/render.py --- photocollage-1.4.3/photocollage/render.py 2016-05-17 15:51:10.000000000 -0400 +++ photocollage-1.4.5/photocollage/render.py 2020-09-24 08:20:02.076167300 -0400 @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright (C) 2014 Adrien Vergé # # This program is free software; you can redistribute it and/or modify @@ -21,6 +20,7 @@ import PIL.Image import PIL.ImageDraw +import PIL.ImageFile from photocollage.collage import Photo @@ -30,7 +30,12 @@ QUALITY_BEST = 2 -class PIL_SUPPORTED_EXTS(object): +# Try to continue even if the input file is corrupted. +# See issue at https://github.com/adrienverge/PhotoCollage/issues/65 +PIL.ImageFile.LOAD_TRUNCATED_IMAGES = True + + +class PIL_SUPPORTED_EXTS: """File extensions supported by PIL Compiled from: @@ -94,7 +99,7 @@ for name in filelist: try: img = PIL.Image.open(name) - except IOError: + except OSError: raise BadPhoto(name) w, h = img.size @@ -105,7 +110,7 @@ orientation = exif[274] if orientation == 6 or orientation == 8: w, h = h, w - except: + except Exception: pass ret.append(Photo(name, w, h, orientation)) @@ -126,7 +131,7 @@ def __init__(self, page, border_width=0.01, border_color=(0, 0, 0), quality=QUALITY_FAST, output_file=None, on_update=None, on_complete=None, on_fail=None): - super(RenderingTask, self).__init__() + super().__init__() self.page = page self.border_width = border_width @@ -235,13 +240,23 @@ cache[cell.photo.filename] = img if shape > 0: # image is too thick - img = img.crop( - (int(round((img.size[0] - cell.w) / 2)), 0, - int(round((img.size[0] + cell.w) / 2)), int(round(cell.h)))) + width_to_crop = img.size[0] - cell.w + img = img.crop(( + int(round(width_to_crop * cell.photo.offset_w)), + 0, + int(round(img.size[0] - width_to_crop * + (1 - cell.photo.offset_w))), + int(round(cell.h)) + )) elif shape < 0: # image is too tall - img = img.crop( - (0, int(round((img.size[1] - cell.h) / 2)), - int(round(cell.w)), int(round((img.size[1] + cell.h) / 2)))) + height_to_crop = img.size[1] - cell.h + img = img.crop(( + 0, + int(round(height_to_crop * cell.photo.offset_h)), + int(round(cell.w)), + int(round(img.size[1] - height_to_crop * + (1 - cell.photo.offset_h))) + )) return img diff -Nru photocollage-1.4.3/PKG-INFO photocollage-1.4.5/PKG-INFO --- photocollage-1.4.3/PKG-INFO 2016-05-17 15:51:18.000000000 -0400 +++ photocollage-1.4.5/PKG-INFO 2021-07-09 11:08:59.068167400 -0400 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: photocollage -Version: 1.4.3 +Version: 1.4.5 Summary: Graphical tool to make photo collage posters Home-page: https://github.com/adrienverge/PhotoCollage Author: Adrien Vergé @@ -14,11 +14,12 @@ Classifier: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+) Classifier: Operating System :: POSIX Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3 :: Only Classifier: Topic :: Multimedia :: Graphics Requires: Pillow Requires: pycairo diff -Nru photocollage-1.4.3/po/bg.po photocollage-1.4.5/po/bg.po --- photocollage-1.4.3/po/bg.po 1969-12-31 19:00:00.000000000 -0500 +++ photocollage-1.4.5/po/bg.po 2017-11-11 04:12:46.101252000 -0500 @@ -0,0 +1,107 @@ +# PhotoCollage translation file +# Copyright (C) 2014 Adrien Vergé +# Copyright (C) 2015 Frank Quotschalla <guts...@computer-retro.de> +# Copyright (C) 2015 Vincent Bermel <willovi...@openmailbox.org> +# This file is distributed under the same license as the PhotoCollage package. +# Adrien Vergé, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: PhotoCollage 1.4.2\n" +"Report-Msgid-Bugs-To: https://github.com/adrienverge/PhotoCollage/issues\n" +"POT-Creation-Date: 2016-04-11 22:51+0200\n" +"PO-Revision-Date: 2017-10-29 20:28+0200\n" +"Last-Translator: Peyu Yovev <spacy00...@gmail.com>\n" +"Language-Team: spacy00...@gmail.com\n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.7.1\n" + +#: photocollage/gtkgui.py:72 photocollage/gtkgui.py:94 +msgid "All supported image formats" +msgstr "Всички поддържани формати" + +#: photocollage/gtkgui.py:104 +#, python-format +msgid "%s image" +msgstr "%s изображение" + +#: photocollage/gtkgui.py:161 +msgid "PhotoCollage" +msgstr "PhotoCollage" + +#: photocollage/gtkgui.py:189 +msgid "Add images..." +msgstr "Добавяне на изображения" + +#: photocollage/gtkgui.py:196 +msgid "Save poster..." +msgstr "Запази колажа..." + +#: photocollage/gtkgui.py:221 +msgid "Regenerate" +msgstr "Регенерирай" + +#: photocollage/gtkgui.py:279 +#, python-format +msgid "" +"This image could not be opened:\n" +"\"%(imgname)s\"." +msgstr "" +"Изображението не може да се отвори:\n" +"\"%(imgname)s\"." + +#: photocollage/gtkgui.py:285 +msgid "Choose images" +msgstr "Изберете изображения" + +#: photocollage/gtkgui.py:339 photocollage/gtkgui.py:424 +msgid "An error occurred while rendering image:" +msgstr "Получи се грешка по време на рендирането:" + +#: photocollage/gtkgui.py:398 +msgid "Save image" +msgstr "Запази изображението" + +#: photocollage/gtkgui.py:622 +msgid "Settings" +msgstr "Настройки" + +#: photocollage/gtkgui.py:634 +msgid "Output image size" +msgstr "Размер на изходното изобранжение" + +#: photocollage/gtkgui.py:649 +msgid "pixels" +msgstr "пиксела" + +#: photocollage/gtkgui.py:673 +msgid "Apply a template:" +msgstr "Приложи шаблон" + +#: photocollage/gtkgui.py:686 +msgid "Border" +msgstr "Рамка" + +#: photocollage/gtkgui.py:691 +msgid "Thickness:" +msgstr "Ширина:" + +#: photocollage/gtkgui.py:701 +msgid "Color:" +msgstr "Цвят:" + +#: photocollage/gtkgui.py:740 +msgid "Please wait" +msgstr "Моля изчакайте" + +#: photocollage/gtkgui.py:749 +msgid "Performing image computation..." +msgstr "Изпълнява се преизчисляване на изображението" + +#: photocollage/gtkgui.py:764 +msgid "Error" +msgstr "Грешка" diff -Nru photocollage-1.4.3/po/es.po photocollage-1.4.5/po/es.po --- photocollage-1.4.3/po/es.po 1969-12-31 19:00:00.000000000 -0500 +++ photocollage-1.4.5/po/es.po 2021-07-09 11:08:13.922905000 -0400 @@ -0,0 +1,105 @@ +# PhotoCollage translation file +# This file is distributed under the same license as the PhotoCollage package. +# Leonardo J. Caballero G. <leonardocaball...@gmail.com>, 2019. +# Andrey Novikov <cookin...@yandex.ru>, 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: PhotoCollage 1.4.4\n" +"Report-Msgid-Bugs-To: https://github.com/adrienverge/PhotoCollage/issues\n" +"POT-Creation-Date: 2014-01-18 02:46-0500\n" +"PO-Revision-Date: 2021-07-05 13:10+0500\n" +"Last-Translator: Leonardo J. Caballero G. <leonardocaball...@gmail.com>\n" +"Language-Team: ES <l...@li.org>\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Virtaal 0.7.1\n" + +#: photocollage/gtkgui.py:72 photocollage/gtkgui.py:94 +msgid "All supported image formats" +msgstr "Todos los formatos de imágenes soportados" + +#: photocollage/gtkgui.py:104 +#, python-format +msgid "%s image" +msgstr "%s imagen" + +#: photocollage/gtkgui.py:161 +msgid "PhotoCollage" +msgstr "PhotoCollage" + +#: photocollage/gtkgui.py:189 +msgid "Add images..." +msgstr "Añadir imágenes..." + +#: photocollage/gtkgui.py:196 +msgid "Save poster..." +msgstr "Guardar póster..." + +#: photocollage/gtkgui.py:221 +msgid "Regenerate" +msgstr "Regenerar" + +#: photocollage/gtkgui.py:279 +#, python-format +msgid "" +"This image could not be opened:\n" +"\"%(imgname)s\"." +msgstr "" +"Esta imagen no pudo ser abierta:\n" +"\"%(imgname)s\"." + +#: photocollage/gtkgui.py:285 +msgid "Choose images" +msgstr "Elegir imágenes" + +#: photocollage/gtkgui.py:339 photocollage/gtkgui.py:424 +msgid "An error occurred while rendering image:" +msgstr "Un error ocurrió al renderizar la imagen:" + +#: photocollage/gtkgui.py:398 +msgid "Save image" +msgstr "Guardar imagen" + +#: photocollage/gtkgui.py:622 +msgid "Settings" +msgstr "Configuración" + +#: photocollage/gtkgui.py:634 +msgid "Output image size" +msgstr "Tamaño de salida de la imagen" + +#: photocollage/gtkgui.py:649 +msgid "pixels" +msgstr "píxeles" + +#: photocollage/gtkgui.py:673 +msgid "Apply a template:" +msgstr "Aplicar una plantilla:" + +#: photocollage/gtkgui.py:686 +msgid "Border" +msgstr "Borde" + +#: photocollage/gtkgui.py:691 +msgid "Thickness:" +msgstr "Espesor:" + +#: photocollage/gtkgui.py:701 +msgid "Color:" +msgstr "Color:" + +#: photocollage/gtkgui.py:740 +msgid "Please wait" +msgstr "Por favor, aguarde" + +#: photocollage/gtkgui.py:749 +msgid "Performing image computation..." +msgstr "Realizando el cálculo de la imagen..." + +#: photocollage/gtkgui.py:764 +msgid "Error" +msgstr "Error" diff -Nru photocollage-1.4.3/po/nl.po photocollage-1.4.5/po/nl.po --- photocollage-1.4.3/po/nl.po 1969-12-31 19:00:00.000000000 -0500 +++ photocollage-1.4.5/po/nl.po 2021-07-09 11:06:40.737365500 -0400 @@ -0,0 +1,107 @@ +# PhotoCollage translation file +# Copyright (C) 2014 Adrien Vergé +# Copyright (C) 2015 Frank Quotschalla <guts...@computer-retro.de> +# Copyright (C) 2015 Vincent Bermel <willovi...@openmailbox.org> +# This file is distributed under the same license as the PhotoCollage package. +# Adrien Vergé, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: https://github.com/adrienverge/PhotoCollage/issues\n" +"POT-Creation-Date: 2016-04-11 22:51+0200\n" +"PO-Revision-Date: 2020-09-24 13:56+0200\n" +"Last-Translator: Heimen Stoffels <vistau...@outlook.com>\n" +"Language-Team: none <n...@none.com>\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.4.1\n" + +#: photocollage/gtkgui.py:72 photocollage/gtkgui.py:94 +msgid "All supported image formats" +msgstr "Alle ondersteunde afbeeldingsformaten" + +#: photocollage/gtkgui.py:104 +#, python-format +msgid "%s image" +msgstr "Afbeelding %s" + +#: photocollage/gtkgui.py:161 +msgid "PhotoCollage" +msgstr "PhotoCollage" + +#: photocollage/gtkgui.py:189 +msgid "Add images..." +msgstr "Afbeeldingen toevoegen..." + +#: photocollage/gtkgui.py:196 +msgid "Save poster..." +msgstr "Poster opslaan..." + +#: photocollage/gtkgui.py:221 +msgid "Regenerate" +msgstr "Opnieuw samenstellen" + +#: photocollage/gtkgui.py:279 +#, python-format +msgid "" +"This image could not be opened:\n" +"\"%(imgname)s\"." +msgstr "" +"De volgende afbeelding kan niet worden geopend:\n" +"\"%(imgname)s\"." + +#: photocollage/gtkgui.py:285 +msgid "Choose images" +msgstr "Afbeeldingen selecteren" + +#: photocollage/gtkgui.py:339 photocollage/gtkgui.py:424 +msgid "An error occurred while rendering image:" +msgstr "Er is een fout opgetreden tijdens het samenstellen:" + +#: photocollage/gtkgui.py:398 +msgid "Save image" +msgstr "Afbeelding opslaan" + +#: photocollage/gtkgui.py:622 +msgid "Settings" +msgstr "Instellingen" + +#: photocollage/gtkgui.py:634 +msgid "Output image size" +msgstr "Afbeeldingsgrootte" + +#: photocollage/gtkgui.py:649 +msgid "pixels" +msgstr "pixels" + +#: photocollage/gtkgui.py:673 +msgid "Apply a template:" +msgstr "Sjabloon toepassen:" + +#: photocollage/gtkgui.py:686 +msgid "Border" +msgstr "Rand" + +#: photocollage/gtkgui.py:691 +msgid "Thickness:" +msgstr "Dikte:" + +#: photocollage/gtkgui.py:701 +msgid "Color:" +msgstr "Kleur:" + +#: photocollage/gtkgui.py:740 +msgid "Please wait" +msgstr "Even geduld" + +#: photocollage/gtkgui.py:749 +msgid "Performing image computation..." +msgstr "Bezig met berekenen..." + +#: photocollage/gtkgui.py:764 +msgid "Error" +msgstr "Fout" diff -Nru photocollage-1.4.3/po/ru.po photocollage-1.4.5/po/ru.po --- photocollage-1.4.3/po/ru.po 1969-12-31 19:00:00.000000000 -0500 +++ photocollage-1.4.5/po/ru.po 2021-07-09 11:06:40.737365500 -0400 @@ -0,0 +1,105 @@ +# PhotoCollage translation file +# Copyright (C) 2021 Andrey Novikov <cookin...@yandex.ru> +# This file is distributed under the same license as the PhotoCollage package. +# Andrey Novikov <cookin...@yandex.ru>, 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: PhotoCollage 1.4.3\n" +"Report-Msgid-Bugs-To: https://github.com/adrienverge/PhotoCollage/issues\n" +"POT-Creation-Date: 2021-07-02 10:29:47+0500\n" +"PO-Revision-Date: 2021-07-02 10:29:47+0500\n" +"Last-Translator: Andrey Novikov <cookin...@yandex.ru>\n" +"Language-Team: Andrey Novikov <cookin...@yandex.ru>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.7.1\n" + +#: photocollage/gtkgui.py:72 photocollage/gtkgui.py:94 +msgid "All supported image formats" +msgstr "Все поддерживаемые форматы изображений" + +#: photocollage/gtkgui.py:104 +#, python-format +msgid "%s image" +msgstr "%s изображение" + +#: photocollage/gtkgui.py:161 +msgid "PhotoCollage" +msgstr "PhotoCollage" + +#: photocollage/gtkgui.py:189 +msgid "Add images..." +msgstr "Добавить изображения..." + +#: photocollage/gtkgui.py:196 +msgid "Save poster..." +msgstr "Сохранить плакат..." + +#: photocollage/gtkgui.py:221 +msgid "Regenerate" +msgstr "Перегенерировать" + +#: photocollage/gtkgui.py:279 +#, python-format +msgid "" +"Изображение не удалось открыть:\n" +"\"%(imgname)s\"." +msgstr "" +"Cette image n'a pas pu être ouverte :\n" +"\"%(imgname)s\"." + +#: photocollage/gtkgui.py:285 +msgid "Choose images" +msgstr "Выбрать изображения" + +#: photocollage/gtkgui.py:339 photocollage/gtkgui.py:424 +msgid "An error occurred while rendering image:" +msgstr "При отрисовке изображения произошла ошибка:" + +#: photocollage/gtkgui.py:398 +msgid "Save image" +msgstr "Сохранить изображение" + +#: photocollage/gtkgui.py:622 +msgid "Settings" +msgstr "Настройки" + +#: photocollage/gtkgui.py:634 +msgid "Output image size" +msgstr "Размер выходного изображения" + +#: photocollage/gtkgui.py:649 +msgid "pixels" +msgstr "пиксели" + +#: photocollage/gtkgui.py:673 +msgid "Apply a template:" +msgstr "Примените шаблон:" + +#: photocollage/gtkgui.py:686 +msgid "Border" +msgstr "Граница" + +#: photocollage/gtkgui.py:691 +msgid "Thickness:" +msgstr "Толщина:" + +#: photocollage/gtkgui.py:701 +msgid "Color:" +msgstr "Цвет:" + +#: photocollage/gtkgui.py:740 +msgid "Please wait" +msgstr "Пожалуйста, подождите" + +#: photocollage/gtkgui.py:749 +msgid "Performing image computation..." +msgstr "Выполнение вычисления изображений..." + +#: photocollage/gtkgui.py:764 +msgid "Error" +msgstr "Ошибка" diff -Nru photocollage-1.4.3/README.rst photocollage-1.4.5/README.rst --- photocollage-1.4.3/README.rst 2016-05-17 15:51:10.000000000 -0400 +++ photocollage-1.4.5/README.rst 2021-07-09 11:08:13.921904800 -0400 @@ -37,29 +37,28 @@ * save high-resolution image * works even with a large number of photos (> 100) * integrates into the GNOME environment -* available in English, French, German, Czech and Italian +* available in English, French, German, Czech, Italian, Bulgarian, Dutch, Russian and Spanish Installation ------------ -* Fedora: +* Fedora 19+: .. code:: bash - sudo yum install photocollage + sudo dnf install photocollage -* Ubuntu: +* Debian 9+ / Ubuntu 16.10+: .. code:: bash - sudo add-apt-repository ppa:dhor/myway && sudo apt-get update sudo apt-get install photocollage * Using pip, the Python package manager: .. code:: bash - sudo pip3 install photocollage # you may need to use python3-pip instead of pip3 + sudo pip3 install photocollage Usage ----- @@ -75,12 +74,25 @@ Hacking ------- -* If you need to install from source: +* If you changed the source and want to test your modifications, run: + + .. code:: bash + + PYTHONPATH=. bin/photocollage + + or: + + .. code:: bash + + python3 -c 'from photocollage import gtkgui; gtkgui.main()' + + +* If you need to build a package from source and install it: .. code:: bash # Install dependencies - sudo yum install python3-pillow python3-gobject + sudo dnf install python3-pillow python3-gobject sudo apt-get install python3-pil python3-gi sudo pacman -S python-pillow python-gobject @@ -93,4 +105,4 @@ .. code:: bash flake8 . - nosetests-3.4 + python3 -m unittest tests/test_*.py diff -Nru photocollage-1.4.3/setup.cfg photocollage-1.4.5/setup.cfg --- photocollage-1.4.3/setup.cfg 1969-12-31 19:00:00.000000000 -0500 +++ photocollage-1.4.5/setup.cfg 2017-11-11 05:04:39.763326600 -0500 @@ -0,0 +1,3 @@ +[flake8] +import-order-style = pep8 +application-import-names = photocollage diff -Nru photocollage-1.4.3/setup.py photocollage-1.4.5/setup.py --- photocollage-1.4.3/setup.py 2016-05-17 15:51:10.000000000 -0400 +++ photocollage-1.4.5/setup.py 2020-09-24 08:20:02.076167300 -0400 @@ -1,5 +1,4 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- # Copyright (C) 2013 Adrien Vergé # # This program is free software; you can redistribute it and/or modify @@ -48,12 +47,13 @@ mo = os.path.join(dir, "%s.mo" % self.distribution.metadata.name) if distutils.dep_util.newer(po, mo): - distutils.log.info("Compile: %s -> %s" % (po, mo)) + distutils.log.info("Compile: {} -> {}".format(po, mo)) self.spawn(["msgfmt", "-o", mo, po]) targetpath = os.path.join("share", "locale", lang, "LC_MESSAGES") self.distribution.data_files.append((targetpath, (mo,))) + distutils.command.build.build.sub_commands.append(("build_i18n", None)) @@ -83,11 +83,12 @@ " :: GNU General Public License v2 or later (GPLv2+)", "Operating System :: POSIX", "Programming Language :: Python", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.3", - "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3 :: Only", "Topic :: Multimedia :: Graphics", ],