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 <[email protected]> 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é <[email protected]>
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 = (
-
"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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-
"piDKt7S3HXEkd7F95pl07riN0J8qL63oDUlMBS6djIN4WImHsz/TApmfTiVUHvKW5keHGywmK"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-
"d8zt3BPq1aVOYVHpMeD7vMCveMmqVOGoew936XEnNThedmVkWeYorYWqiTqRXKRrx+STC0P+u"
-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"
-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"
-
"kKgvHpbm6krJ6kmseJLHgNeBJbm8leTe48e/nbwAf80BSJnPE2LV6rxWJRzzJv5Fxiy/wz7zN"
-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"
-
"+S/eZawlTGW6aggxMY4KNnzIJf60MR22Gy36yXo477DHcpXUcnrFLSyClpYB1B4BFItjqgcpe"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-
"0eS0MW+MD+Ey/yv7zJgm9yn/s8x2dG28aVDUi6byuHexkiA4C3t8pRpQWeCd5ChLzStnTfC6+"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-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"
-
"1TNOl98IkT0eDUDX63rAxSGIvptnca6WSLHHc66s9JGZ7chguZCoarigPVB1IajpYUQlToJJ2"
-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"
-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"
- "/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 <[email protected]>
+# Copyright (C) 2015 Vincent Bermel <[email protected]>
+# 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 <[email protected]>\n"
+"Language-Team: [email protected]\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. <[email protected]>, 2019.
+# Andrey Novikov <[email protected]>, 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. <[email protected]>\n"
+"Language-Team: ES <[email protected]>\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 <[email protected]>
+# Copyright (C) 2015 Vincent Bermel <[email protected]>
+# 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 <[email protected]>\n"
+"Language-Team: none <[email protected]>\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 <[email protected]>
+# This file is distributed under the same license as the PhotoCollage
package.
+# Andrey Novikov <[email protected]>, 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 <[email protected]>\n"
+"Language-Team: Andrey Novikov <[email protected]>\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",
],