Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-pgmagick for openSUSE:Factory
checked in at 2026-01-27 16:17:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pgmagick (Old)
and /work/SRC/openSUSE:Factory/.python-pgmagick.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pgmagick"
Tue Jan 27 16:17:47 2026 rev:7 rq:1329414 version:0.8
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pgmagick/python-pgmagick.changes
2025-07-09 17:29:34.126454321 +0200
+++
/work/SRC/openSUSE:Factory/.python-pgmagick.new.1928/python-pgmagick.changes
2026-01-27 16:17:54.023959399 +0100
@@ -1,0 +2,8 @@
+Tue Jan 27 07:04:02 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 0.8:
+ * Update docs
+ * add update
+ * Python 3.14 support
+
+-------------------------------------------------------------------
Old:
----
pgmagick-0.7.6.tar.gz
New:
----
pgmagick-0.8.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pgmagick.spec ++++++
--- /var/tmp/diff_new_pack.gxzSA2/_old 2026-01-27 16:17:55.004000221 +0100
+++ /var/tmp/diff_new_pack.gxzSA2/_new 2026-01-27 16:17:55.008000387 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-pgmagick
#
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -22,7 +22,7 @@
%define pythons python3
%{?sle15_python_module_pythons}
Name: python-pgmagick
-Version: 0.7.6
+Version: 0.8
Release: 0
Summary: Yet Another Python wrapper for GraphicsMagick
License: MIT
++++++ pgmagick-0.7.6.tar.gz -> pgmagick-0.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pgmagick-0.7.6/PKG-INFO new/pgmagick-0.8/PKG-INFO
--- old/pgmagick-0.7.6/PKG-INFO 2021-04-21 17:31:39.000000000 +0200
+++ new/pgmagick-0.8/PKG-INFO 2025-12-29 01:47:33.270090800 +0100
@@ -1,196 +1,202 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.4
Name: pgmagick
-Version: 0.7.6
+Version: 0.8
Summary: Yet Another Python wrapper for GraphicsMagick
-Home-page: https://github.com/hhatto/pgmagick
-Author: Hideo Hattori
-Author-email: [email protected]
-License: MIT
-Description: About
- =====
-
- .. image:: https://img.shields.io/pypi/v/pgmagick.svg
- :target: https://pypi.org/project/pgmagick/
- :alt: PyPI Version
-
- .. image::
https://github.com/hhatto/pgmagick/workflows/Python%20package/badge.svg
- :target: https://github.com/hhatto/pgmagick/actions
- :alt: Build status
-
- pgmagick is a yet another boost.python based wrapper for
GraphicsMagick_ .
-
- .. _GraphicsMagick: http://www.graphicsmagick.org/
-
- Installation
- ============
- install to::
-
- $ pip install pgmagick
-
-
- Requirements
- ============
- Python3.5++ (or Python2.7), GraphicsMagick and Boost.Python.
-
- package install on Debian Buster::
-
- $ apt-get install g++ libgraphicsmagick++1-dev libboost-python-dev
-
- package install on Ubuntu(test on Ubuntu10.04+)::
-
- ### Ubuntu11.10+ ###
- $ apt-get install python-pgmagick
-
- ### Ubuntu10.04+ ###
- $ apt-get install libgraphicsmagick++1-dev
- $ apt-get install libboost-python1.40-dev
-
- package install on Fedora::
-
- $ yum install GraphicsMagick-c++-devel
- $ yum install boost-devel
-
- GraphicsMagick from source package::
-
- $ ./configure --enable-shared=yes
- $ make && make install
-
- MacOSX
- ------
-
- via homebrew-cask(homebrew-pgmagick) with Python3
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- use `homebrew-pgmagick`_ ::
-
- $ brew tap hhatto/pgmagick
- $ brew install pgmagick
-
- .. _`homebrew-pgmagick`: https://github.com/hhatto/homebrew-pgmagick
-
- via homebrew-cask(homebrew-pgmagick) with Python3
-
- via homebrew and pip with Python3
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- on MacOSX (10.13.5~10.15.x)::
-
- $ brew install python
- $ brew install graphicsmagick
- $ brew install boost-python3
- $ pip install pgmagick
-
-
- Windows
- -------
- Now, not official support.
- However, *unofficial* binary packages exists.
-
- - http://www.lfd.uci.edu/~gohlke/pythonlibs/#pgmagick
-
- ImageMagick support
- -------------------
- pgmagick is supported to ImageMagick library. (*version:0.4+*)
-
- package install on Ubuntu(test on Ubuntu10.04+)::
-
- $ apt-get install libmagick++-dev
-
- show library name and version::
-
- >>> from pgmagick import gminfo
- >>> gminfo.library
- 'GraphicsMagick' # or 'ImageMagick'
- >>> gminfo.version
- '1.3.x'
- >>>
-
- Usage
- =====
-
- scale example::
-
- >>> from pgmagick import Image
- >>> im = Image('input.jpg')
- >>> im.quality(100)
- >>> im.scale('100x100')
- >>> im.sharpen(1.0)
- >>> im.write('output.jpg')
-
- resize example::
-
- >>> from pgmagick import Image
- >>> im = Image('input.jpg')
- >>> im.filterType(FilterTypes.SincFilter)
- >>> im.resize('100x100')
- >>> im.write('output.jpg')
-
- composite example::
-
- >>> from pgmagick import Image, CompositeOperator as co
- >>> base = Image('base.png')
- >>> layer = Image('layer_one.png')
- >>> base.composite(layer, 100, 100, co.OverCompositeOp)
- >>> im.write('output.png')
-
- draw example::
-
- >>> from pgmagick import Image, DrawableCircle, DrawableText,
Geometry, Color
- >>> im = Image(Geometry(300, 300), Color("yellow"))
- >>> circle = DrawableCircle(100, 100, 20, 20)
- >>> im.draw(circle)
- >>> im.fontPointsize(65)
- >>> text = DrawableText(30, 250, "Hello pgmagick")
- >>> im.draw(text)
- >>> im.write('hoge.png')
-
- blob access::
-
- >>> from pgmagick import Image, Blob, Geometry
- >>> blob = Blob(open('filename.jpg').read())
- >>> blob.update(open('filename2.jpg').read())
- >>> img = Image(blob, Geometry(600, 480))
- >>> img.scale('300x200')
- >>> img.write('out.jpg')
-
- create animated-GIF::
-
- from pgmagick import Image, ImageList, Geometry, Color
-
- imgs = ImageList()
- for color in ('red', 'blue', 'green', 'black', 'yellow'):
- imgs.append(Image(Geometry(200, 200), Color(color)))
- imgs.animationDelayImages(100)
- imgs.scaleImages(Geometry(100, 100))
- imgs.writeImages('output.gif')
-
- more API detail... read to `Magick++ API for GraphicsMagick`_ document.
-
- .. _`Magick++ API for GraphicsMagick`:
http://www.graphicsmagick.org/Magick++/
-
- Python APIs(*NOTICE!! this api is alpha version!!*)::
-
- >>> from pgmagick.api import Image
- >>> img = Image((300, 300), "gradient:#ffffff-#000000")
- >>> img.scale(0.8)
- >>> img.write('out.png')
-
-
- Links
- =====
- * PyPI_
- * `Project Page`_
- * `Project Page (Old)`_
-
- .. _PyPI: http://pypi.python.org/pypi/pgmagick/
- .. _`Project Page`: https://github.com/hhatto/pgmagick/
- .. _`Project Page (Old)`: https://bitbucket.org/hhatto/pgmagick/
-
-Keywords: GraphicsMagick ImageMagick graphics boost image
-Platform: UNKNOWN
+Author-email: Hideo Hattori <[email protected]>
+Project-URL: Homepage, https://github.com/hhatto/pgmagick
+Project-URL: Repository, https://github.com/hhatto/pgmagick
+Keywords: GraphicsMagick,ImageMagick,graphics,boost,image
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX
Classifier: Programming Language :: C++
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Multimedia :: Graphics
+Requires-Python: >=3.10
+Description-Content-Type: text/x-rst
+License-File: LICENSE
+Dynamic: license-file
+
+About
+=====
+
+.. image:: https://img.shields.io/pypi/v/pgmagick.svg
+ :target: https://pypi.org/project/pgmagick/
+ :alt: PyPI Version
+
+.. image::
https://github.com/hhatto/pgmagick/workflows/Python%20package/badge.svg
+ :target: https://github.com/hhatto/pgmagick/actions
+ :alt: Build status
+
+pgmagick is a yet another boost.python based wrapper for GraphicsMagick_ .
+
+.. _GraphicsMagick: http://www.graphicsmagick.org/
+
+Installation
+============
+install to::
+
+ $ pip install pgmagick
+
+
+Requirements
+============
+Python3.5++ (or Python2.7), GraphicsMagick and Boost.Python.
+
+package install on Debian Buster::
+
+ $ apt-get install g++ libgraphicsmagick++1-dev libboost-python-dev
+
+package install on Ubuntu(test on Ubuntu10.04+)::
+
+ ### Ubuntu11.10+ ###
+ $ apt-get install python-pgmagick
+
+ ### Ubuntu10.04+ ###
+ $ apt-get install libgraphicsmagick++1-dev
+ $ apt-get install libboost-python1.40-dev
+
+package install on Fedora::
+
+ $ yum install GraphicsMagick-c++-devel
+ $ yum install boost-devel
+
+GraphicsMagick from source package::
+
+ $ ./configure --enable-shared=yes
+ $ make && make install
+
+MacOSX
+------
+
+via homebrew-cask(homebrew-pgmagick) with Python3
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+use `homebrew-pgmagick`_ ::
+
+ $ brew tap hhatto/pgmagick
+ $ brew install pgmagick
+
+.. _`homebrew-pgmagick`: https://github.com/hhatto/homebrew-pgmagick
+
+via homebrew-cask(homebrew-pgmagick) with Python3
+
+via homebrew and pip with Python3
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+on MacOSX (10.13.5~10.15.x)::
+
+ $ brew install python
+ $ brew install graphicsmagick
+ $ brew install boost-python3
+ $ pip install pgmagick
+
+
+Windows
+-------
+Now, not official support.
+However, *unofficial* binary packages exists.
+
+- http://www.lfd.uci.edu/~gohlke/pythonlibs/#pgmagick
+
+ImageMagick support
+-------------------
+pgmagick is supported to ImageMagick library. (*version:0.4+*)
+
+package install on Ubuntu(test on Ubuntu10.04+)::
+
+ $ apt-get install libmagick++-dev
+
+show library name and version::
+
+ >>> from pgmagick import gminfo
+ >>> gminfo.library
+ 'GraphicsMagick' # or 'ImageMagick'
+ >>> gminfo.version
+ '1.3.x'
+ >>>
+
+Usage
+=====
+
+scale example::
+
+ >>> from pgmagick import Image
+ >>> im = Image('input.jpg')
+ >>> im.quality(100)
+ >>> im.scale('100x100')
+ >>> im.sharpen(1.0)
+ >>> im.write('output.jpg')
+
+resize example::
+
+ >>> from pgmagick import Image
+ >>> im = Image('input.jpg')
+ >>> im.filterType(FilterTypes.SincFilter)
+ >>> im.resize('100x100')
+ >>> im.write('output.jpg')
+
+composite example::
+
+ >>> from pgmagick import Image, CompositeOperator as co
+ >>> base = Image('base.png')
+ >>> layer = Image('layer_one.png')
+ >>> base.composite(layer, 100, 100, co.OverCompositeOp)
+ >>> im.write('output.png')
+
+draw example::
+
+ >>> from pgmagick import Image, DrawableCircle, DrawableText, Geometry,
Color
+ >>> im = Image(Geometry(300, 300), Color("yellow"))
+ >>> circle = DrawableCircle(100, 100, 20, 20)
+ >>> im.draw(circle)
+ >>> im.fontPointsize(65)
+ >>> text = DrawableText(30, 250, "Hello pgmagick")
+ >>> im.draw(text)
+ >>> im.write('hoge.png')
+
+blob access::
+
+ >>> from pgmagick import Image, Blob, Geometry
+ >>> blob = Blob(open('filename.jpg').read())
+ >>> blob.update(open('filename2.jpg').read())
+ >>> img = Image(blob, Geometry(600, 480))
+ >>> img.scale('300x200')
+ >>> img.write('out.jpg')
+
+create animated-GIF::
+
+ from pgmagick import Image, ImageList, Geometry, Color
+
+ imgs = ImageList()
+ for color in ('red', 'blue', 'green', 'black', 'yellow'):
+ imgs.append(Image(Geometry(200, 200), Color(color)))
+ imgs.animationDelayImages(100)
+ imgs.scaleImages(Geometry(100, 100))
+ imgs.writeImages('output.gif')
+
+more API detail... read to `Magick++ API for GraphicsMagick`_ document.
+
+.. _`Magick++ API for GraphicsMagick`: http://www.graphicsmagick.org/Magick++/
+
+Python APIs(*NOTICE!! this api is alpha version!!*)::
+
+ >>> from pgmagick.api import Image
+ >>> img = Image((300, 300), "gradient:#ffffff-#000000")
+ >>> img.scale(0.8)
+ >>> img.write('out.png')
+
+
+Links
+=====
+* PyPI_
+* `Project Page`_
+* `Project Page (Old)`_
+
+.. _PyPI: http://pypi.python.org/pypi/pgmagick/
+.. _`Project Page`: https://github.com/hhatto/pgmagick/
+.. _`Project Page (Old)`: https://bitbucket.org/hhatto/pgmagick/
Binary files old/pgmagick-0.7.6/example/Xo.jpg and
new/pgmagick-0.8/example/Xo.jpg differ
Binary files old/pgmagick-0.7.6/example/Y.jpg and
new/pgmagick-0.8/example/Y.jpg differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pgmagick-0.7.6/example/blob.py
new/pgmagick-0.8/example/blob.py
--- old/pgmagick-0.7.6/example/blob.py 2019-10-31 14:23:42.000000000 +0100
+++ new/pgmagick-0.8/example/blob.py 2024-08-20 02:32:28.000000000 +0200
@@ -1,8 +1,5 @@
from pgmagick import Blob, Image, Color, Geometry
-blob = Blob(open('example.png').read())
-#print dir(blob)
-#print len(blob.data)
-#print blob.length()
+blob = Blob(open('example.png', 'rb').read())
img = Image(blob)
img.write('from_blob_to_image.png')
Binary files old/pgmagick-0.7.6/example/from_blob_to_image.png and
new/pgmagick-0.8/example/from_blob_to_image.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pgmagick-0.7.6/example/imagelist.py
new/pgmagick-0.8/example/imagelist.py
--- old/pgmagick-0.7.6/example/imagelist.py 2019-10-31 14:23:42.000000000
+0100
+++ new/pgmagick-0.8/example/imagelist.py 2024-08-20 02:32:28.000000000
+0200
@@ -5,10 +5,10 @@
imgs.append(Image(Geometry(200, 200), Color(color)))
imgs.animationDelayImages(100)
imgs.scaleImages(Geometry(100, 100))
-print len(imgs)
+print(len(imgs))
imgs.writeImages('output.gif')
imgs = ImageList()
imgs.readImages('output.gif')
for img in imgs:
- print img
+ print(img)
Binary files old/pgmagick-0.7.6/example/new.pdf and
new/pgmagick-0.8/example/new.pdf differ
Binary files old/pgmagick-0.7.6/example/output.gif and
new/pgmagick-0.8/example/output.gif differ
Binary files old/pgmagick-0.7.6/example/output.jpg and
new/pgmagick-0.8/example/output.jpg differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pgmagick-0.7.6/example/pixels.py
new/pgmagick-0.8/example/pixels.py
--- old/pgmagick-0.7.6/example/pixels.py 2019-10-31 14:23:42.000000000
+0100
+++ new/pgmagick-0.8/example/pixels.py 2024-08-20 02:32:28.000000000 +0200
@@ -1,15 +1,15 @@
from pgmagick import Image, Blob
-blob = Blob(open('X.jpg').read())
+blob = Blob(open('X.jpg', 'rb').read())
img = Image(blob)
size = img.size()
-pixels = img.getPixels(0, 0, size.width()/2, size.height()/2)
+pixels = img.getPixels(0, 0, int(size.width()/2), int(size.height()/2))
for cnt, pixel in enumerate(pixels):
if False:
print(pixel.red, pixel.blue, pixel.green, pixel.opacity)
- pixel.blue = pixel.blue / 2
- pixel.green = pixel.green / 2
- pixel.red = pixel.red / 2
+ pixel.blue = int(pixel.blue / 2)
+ pixel.green = int(pixel.green / 2)
+ pixel.red = int(pixel.red / 2)
img.syncPixels()
img.write("Xo.jpg")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pgmagick-0.7.6/example/writeimages_with_blob.py
new/pgmagick-0.8/example/writeimages_with_blob.py
--- old/pgmagick-0.7.6/example/writeimages_with_blob.py 2019-10-31
14:23:42.000000000 +0100
+++ new/pgmagick-0.8/example/writeimages_with_blob.py 2024-08-20
02:32:28.000000000 +0200
@@ -1,7 +1,6 @@
-#!/usr/bin/env python
import pgmagick
-im = pgmagick.Image('existing.tif')
+im = pgmagick.Image('X.jpg')
pdf = pgmagick.ImageList()
pdf.append(im)
@@ -10,4 +9,4 @@
blob = pgmagick.Blob()
pdf.writeImages(blob)
-print blob.length()
+print(blob.length())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pgmagick-0.7.6/pgmagick/_version.py
new/pgmagick-0.8/pgmagick/_version.py
--- old/pgmagick-0.7.6/pgmagick/_version.py 2021-04-21 17:28:31.000000000
+0200
+++ new/pgmagick-0.8/pgmagick/_version.py 2025-12-29 01:43:45.000000000
+0100
@@ -1 +1 @@
-__version__ = '0.7.6'
+__version__ = '0.8'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pgmagick-0.7.6/pgmagick.egg-info/PKG-INFO
new/pgmagick-0.8/pgmagick.egg-info/PKG-INFO
--- old/pgmagick-0.7.6/pgmagick.egg-info/PKG-INFO 2021-04-21
17:31:39.000000000 +0200
+++ new/pgmagick-0.8/pgmagick.egg-info/PKG-INFO 2025-12-29 01:47:33.000000000
+0100
@@ -1,196 +1,202 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.4
Name: pgmagick
-Version: 0.7.6
+Version: 0.8
Summary: Yet Another Python wrapper for GraphicsMagick
-Home-page: https://github.com/hhatto/pgmagick
-Author: Hideo Hattori
-Author-email: [email protected]
-License: MIT
-Description: About
- =====
-
- .. image:: https://img.shields.io/pypi/v/pgmagick.svg
- :target: https://pypi.org/project/pgmagick/
- :alt: PyPI Version
-
- .. image::
https://github.com/hhatto/pgmagick/workflows/Python%20package/badge.svg
- :target: https://github.com/hhatto/pgmagick/actions
- :alt: Build status
-
- pgmagick is a yet another boost.python based wrapper for
GraphicsMagick_ .
-
- .. _GraphicsMagick: http://www.graphicsmagick.org/
-
- Installation
- ============
- install to::
-
- $ pip install pgmagick
-
-
- Requirements
- ============
- Python3.5++ (or Python2.7), GraphicsMagick and Boost.Python.
-
- package install on Debian Buster::
-
- $ apt-get install g++ libgraphicsmagick++1-dev libboost-python-dev
-
- package install on Ubuntu(test on Ubuntu10.04+)::
-
- ### Ubuntu11.10+ ###
- $ apt-get install python-pgmagick
-
- ### Ubuntu10.04+ ###
- $ apt-get install libgraphicsmagick++1-dev
- $ apt-get install libboost-python1.40-dev
-
- package install on Fedora::
-
- $ yum install GraphicsMagick-c++-devel
- $ yum install boost-devel
-
- GraphicsMagick from source package::
-
- $ ./configure --enable-shared=yes
- $ make && make install
-
- MacOSX
- ------
-
- via homebrew-cask(homebrew-pgmagick) with Python3
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- use `homebrew-pgmagick`_ ::
-
- $ brew tap hhatto/pgmagick
- $ brew install pgmagick
-
- .. _`homebrew-pgmagick`: https://github.com/hhatto/homebrew-pgmagick
-
- via homebrew-cask(homebrew-pgmagick) with Python3
-
- via homebrew and pip with Python3
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- on MacOSX (10.13.5~10.15.x)::
-
- $ brew install python
- $ brew install graphicsmagick
- $ brew install boost-python3
- $ pip install pgmagick
-
-
- Windows
- -------
- Now, not official support.
- However, *unofficial* binary packages exists.
-
- - http://www.lfd.uci.edu/~gohlke/pythonlibs/#pgmagick
-
- ImageMagick support
- -------------------
- pgmagick is supported to ImageMagick library. (*version:0.4+*)
-
- package install on Ubuntu(test on Ubuntu10.04+)::
-
- $ apt-get install libmagick++-dev
-
- show library name and version::
-
- >>> from pgmagick import gminfo
- >>> gminfo.library
- 'GraphicsMagick' # or 'ImageMagick'
- >>> gminfo.version
- '1.3.x'
- >>>
-
- Usage
- =====
-
- scale example::
-
- >>> from pgmagick import Image
- >>> im = Image('input.jpg')
- >>> im.quality(100)
- >>> im.scale('100x100')
- >>> im.sharpen(1.0)
- >>> im.write('output.jpg')
-
- resize example::
-
- >>> from pgmagick import Image
- >>> im = Image('input.jpg')
- >>> im.filterType(FilterTypes.SincFilter)
- >>> im.resize('100x100')
- >>> im.write('output.jpg')
-
- composite example::
-
- >>> from pgmagick import Image, CompositeOperator as co
- >>> base = Image('base.png')
- >>> layer = Image('layer_one.png')
- >>> base.composite(layer, 100, 100, co.OverCompositeOp)
- >>> im.write('output.png')
-
- draw example::
-
- >>> from pgmagick import Image, DrawableCircle, DrawableText,
Geometry, Color
- >>> im = Image(Geometry(300, 300), Color("yellow"))
- >>> circle = DrawableCircle(100, 100, 20, 20)
- >>> im.draw(circle)
- >>> im.fontPointsize(65)
- >>> text = DrawableText(30, 250, "Hello pgmagick")
- >>> im.draw(text)
- >>> im.write('hoge.png')
-
- blob access::
-
- >>> from pgmagick import Image, Blob, Geometry
- >>> blob = Blob(open('filename.jpg').read())
- >>> blob.update(open('filename2.jpg').read())
- >>> img = Image(blob, Geometry(600, 480))
- >>> img.scale('300x200')
- >>> img.write('out.jpg')
-
- create animated-GIF::
-
- from pgmagick import Image, ImageList, Geometry, Color
-
- imgs = ImageList()
- for color in ('red', 'blue', 'green', 'black', 'yellow'):
- imgs.append(Image(Geometry(200, 200), Color(color)))
- imgs.animationDelayImages(100)
- imgs.scaleImages(Geometry(100, 100))
- imgs.writeImages('output.gif')
-
- more API detail... read to `Magick++ API for GraphicsMagick`_ document.
-
- .. _`Magick++ API for GraphicsMagick`:
http://www.graphicsmagick.org/Magick++/
-
- Python APIs(*NOTICE!! this api is alpha version!!*)::
-
- >>> from pgmagick.api import Image
- >>> img = Image((300, 300), "gradient:#ffffff-#000000")
- >>> img.scale(0.8)
- >>> img.write('out.png')
-
-
- Links
- =====
- * PyPI_
- * `Project Page`_
- * `Project Page (Old)`_
-
- .. _PyPI: http://pypi.python.org/pypi/pgmagick/
- .. _`Project Page`: https://github.com/hhatto/pgmagick/
- .. _`Project Page (Old)`: https://bitbucket.org/hhatto/pgmagick/
-
-Keywords: GraphicsMagick ImageMagick graphics boost image
-Platform: UNKNOWN
+Author-email: Hideo Hattori <[email protected]>
+Project-URL: Homepage, https://github.com/hhatto/pgmagick
+Project-URL: Repository, https://github.com/hhatto/pgmagick
+Keywords: GraphicsMagick,ImageMagick,graphics,boost,image
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX
Classifier: Programming Language :: C++
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Multimedia :: Graphics
+Requires-Python: >=3.10
+Description-Content-Type: text/x-rst
+License-File: LICENSE
+Dynamic: license-file
+
+About
+=====
+
+.. image:: https://img.shields.io/pypi/v/pgmagick.svg
+ :target: https://pypi.org/project/pgmagick/
+ :alt: PyPI Version
+
+.. image::
https://github.com/hhatto/pgmagick/workflows/Python%20package/badge.svg
+ :target: https://github.com/hhatto/pgmagick/actions
+ :alt: Build status
+
+pgmagick is a yet another boost.python based wrapper for GraphicsMagick_ .
+
+.. _GraphicsMagick: http://www.graphicsmagick.org/
+
+Installation
+============
+install to::
+
+ $ pip install pgmagick
+
+
+Requirements
+============
+Python3.5++ (or Python2.7), GraphicsMagick and Boost.Python.
+
+package install on Debian Buster::
+
+ $ apt-get install g++ libgraphicsmagick++1-dev libboost-python-dev
+
+package install on Ubuntu(test on Ubuntu10.04+)::
+
+ ### Ubuntu11.10+ ###
+ $ apt-get install python-pgmagick
+
+ ### Ubuntu10.04+ ###
+ $ apt-get install libgraphicsmagick++1-dev
+ $ apt-get install libboost-python1.40-dev
+
+package install on Fedora::
+
+ $ yum install GraphicsMagick-c++-devel
+ $ yum install boost-devel
+
+GraphicsMagick from source package::
+
+ $ ./configure --enable-shared=yes
+ $ make && make install
+
+MacOSX
+------
+
+via homebrew-cask(homebrew-pgmagick) with Python3
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+use `homebrew-pgmagick`_ ::
+
+ $ brew tap hhatto/pgmagick
+ $ brew install pgmagick
+
+.. _`homebrew-pgmagick`: https://github.com/hhatto/homebrew-pgmagick
+
+via homebrew-cask(homebrew-pgmagick) with Python3
+
+via homebrew and pip with Python3
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+on MacOSX (10.13.5~10.15.x)::
+
+ $ brew install python
+ $ brew install graphicsmagick
+ $ brew install boost-python3
+ $ pip install pgmagick
+
+
+Windows
+-------
+Now, not official support.
+However, *unofficial* binary packages exists.
+
+- http://www.lfd.uci.edu/~gohlke/pythonlibs/#pgmagick
+
+ImageMagick support
+-------------------
+pgmagick is supported to ImageMagick library. (*version:0.4+*)
+
+package install on Ubuntu(test on Ubuntu10.04+)::
+
+ $ apt-get install libmagick++-dev
+
+show library name and version::
+
+ >>> from pgmagick import gminfo
+ >>> gminfo.library
+ 'GraphicsMagick' # or 'ImageMagick'
+ >>> gminfo.version
+ '1.3.x'
+ >>>
+
+Usage
+=====
+
+scale example::
+
+ >>> from pgmagick import Image
+ >>> im = Image('input.jpg')
+ >>> im.quality(100)
+ >>> im.scale('100x100')
+ >>> im.sharpen(1.0)
+ >>> im.write('output.jpg')
+
+resize example::
+
+ >>> from pgmagick import Image
+ >>> im = Image('input.jpg')
+ >>> im.filterType(FilterTypes.SincFilter)
+ >>> im.resize('100x100')
+ >>> im.write('output.jpg')
+
+composite example::
+
+ >>> from pgmagick import Image, CompositeOperator as co
+ >>> base = Image('base.png')
+ >>> layer = Image('layer_one.png')
+ >>> base.composite(layer, 100, 100, co.OverCompositeOp)
+ >>> im.write('output.png')
+
+draw example::
+
+ >>> from pgmagick import Image, DrawableCircle, DrawableText, Geometry,
Color
+ >>> im = Image(Geometry(300, 300), Color("yellow"))
+ >>> circle = DrawableCircle(100, 100, 20, 20)
+ >>> im.draw(circle)
+ >>> im.fontPointsize(65)
+ >>> text = DrawableText(30, 250, "Hello pgmagick")
+ >>> im.draw(text)
+ >>> im.write('hoge.png')
+
+blob access::
+
+ >>> from pgmagick import Image, Blob, Geometry
+ >>> blob = Blob(open('filename.jpg').read())
+ >>> blob.update(open('filename2.jpg').read())
+ >>> img = Image(blob, Geometry(600, 480))
+ >>> img.scale('300x200')
+ >>> img.write('out.jpg')
+
+create animated-GIF::
+
+ from pgmagick import Image, ImageList, Geometry, Color
+
+ imgs = ImageList()
+ for color in ('red', 'blue', 'green', 'black', 'yellow'):
+ imgs.append(Image(Geometry(200, 200), Color(color)))
+ imgs.animationDelayImages(100)
+ imgs.scaleImages(Geometry(100, 100))
+ imgs.writeImages('output.gif')
+
+more API detail... read to `Magick++ API for GraphicsMagick`_ document.
+
+.. _`Magick++ API for GraphicsMagick`: http://www.graphicsmagick.org/Magick++/
+
+Python APIs(*NOTICE!! this api is alpha version!!*)::
+
+ >>> from pgmagick.api import Image
+ >>> img = Image((300, 300), "gradient:#ffffff-#000000")
+ >>> img.scale(0.8)
+ >>> img.write('out.png')
+
+
+Links
+=====
+* PyPI_
+* `Project Page`_
+* `Project Page (Old)`_
+
+.. _PyPI: http://pypi.python.org/pypi/pgmagick/
+.. _`Project Page`: https://github.com/hhatto/pgmagick/
+.. _`Project Page (Old)`: https://bitbucket.org/hhatto/pgmagick/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pgmagick-0.7.6/pgmagick.egg-info/SOURCES.txt
new/pgmagick-0.8/pgmagick.egg-info/SOURCES.txt
--- old/pgmagick-0.7.6/pgmagick.egg-info/SOURCES.txt 2021-04-21
17:31:39.000000000 +0200
+++ new/pgmagick-0.8/pgmagick.egg-info/SOURCES.txt 2025-12-29
01:47:33.000000000 +0100
@@ -2,6 +2,7 @@
MANIFEST.in
Makefile
README.rst
+pyproject.toml
setup.py
./src/_Blob.cpp
./src/_ChannelType.cpp
@@ -113,17 +114,23 @@
./src/_gminfo.cpp
./src/_main.cpp
example/X.jpg
+example/Xo.jpg
+example/Y.jpg
example/bezier.py
example/blob.py
example/draw.py
example/drawablelist.py
example/example.png
+example/from_blob_to_image.png
example/gm.sh
example/gradient.py
example/gravity.py
example/im.sh
example/image_from_storage.py
example/imagelist.py
+example/new.pdf
+example/output.gif
+example/output.jpg
example/pgmagick_prof.py
example/pixels.py
example/profile.sh
@@ -140,7 +147,116 @@
pgmagick.egg-info/top_level.txt
src/Makefile
src/_ArrayProxy.h
+src/_Blob.cpp
+src/_ChannelType.cpp
+src/_Color.cpp
+src/_ColorspaceType.cpp
+src/_CompositeOperator.cpp
+src/_CompressionType.cpp
+src/_Coordinate.cpp
+src/_DecorationType.cpp
+src/_DistortImageMethod.cpp
+src/_Drawable.cpp
+src/_DrawableAffine.cpp
+src/_DrawableArc.cpp
+src/_DrawableBezier.cpp
+src/_DrawableCircle.cpp
+src/_DrawableClipPath.cpp
+src/_DrawableColor.cpp
+src/_DrawableCompositeImage.cpp
+src/_DrawableDashArray.cpp
+src/_DrawableDashOffset.cpp
+src/_DrawableEllipse.cpp
+src/_DrawableFillColor.cpp
+src/_DrawableFillOpacity.cpp
+src/_DrawableFillRule.cpp
+src/_DrawableFont.cpp
+src/_DrawableGravity.cpp
+src/_DrawableLine.cpp
+src/_DrawableMatte.cpp
+src/_DrawableMiterLimit.cpp
+src/_DrawablePath.cpp
+src/_DrawablePoint.cpp
+src/_DrawablePointSize.cpp
+src/_DrawablePolygon.cpp
+src/_DrawablePolyline.cpp
+src/_DrawablePopClipPath.cpp
+src/_DrawablePopGraphicContext.cpp
+src/_DrawablePopPattern.cpp
+src/_DrawablePushClipPath.cpp
+src/_DrawablePushGraphicContext.cpp
+src/_DrawablePushPattern.cpp
+src/_DrawableRectangle.cpp
+src/_DrawableRotation.cpp
+src/_DrawableRoundRectangle.cpp
+src/_DrawableScaling.cpp
+src/_DrawableSkewX.cpp
+src/_DrawableSkewY.cpp
+src/_DrawableStrokeAntialias.cpp
+src/_DrawableStrokeColor.cpp
+src/_DrawableStrokeLineCap.cpp
+src/_DrawableStrokeLineJoin.cpp
+src/_DrawableStrokeOpacity.cpp
+src/_DrawableStrokeWidth.cpp
+src/_DrawableText.cpp
+src/_DrawableTextAntialias.cpp
+src/_DrawableTextDecoration.cpp
+src/_DrawableTextUnderColor.cpp
+src/_DrawableTranslation.cpp
+src/_DrawableViewbox.cpp
+src/_EndianType.cpp
+src/_Exception.cpp
+src/_FillRule.cpp
+src/_FilterTypes.cpp
+src/_Geometry.cpp
+src/_GravityType.cpp
+src/_Image.cpp
+src/_ImageType.cpp
+src/_InterlaceType.cpp
+src/_LineCap.cpp
+src/_LineJoin.cpp
+src/_Montage.cpp
+src/_NoiseType.cpp
+src/_OrientationType.cpp
+src/_PaintMethod.cpp
+src/_PathArcAbs.cpp
+src/_PathArcArgs.cpp
+src/_PathArcRel.cpp
+src/_PathClosePath.cpp
+src/_PathCurvetoAbs.cpp
+src/_PathCurvetoArgs.cpp
+src/_PathCurvetoRel.cpp
+src/_PathLinetoAbs.cpp
+src/_PathLinetoHorizontalAbs.cpp
+src/_PathLinetoHorizontalRel.cpp
+src/_PathLinetoRel.cpp
+src/_PathLinetoVerticalAbs.cpp
+src/_PathLinetoVerticalRel.cpp
+src/_PathMovetoAbs.cpp
+src/_PathMovetoRel.cpp
+src/_PathQuadraticCurvetoAbs.cpp
+src/_PathQuadraticCurvetoArgs.cpp
+src/_PathQuadraticCurvetoRel.cpp
+src/_PathSmoothCurvetoAbs.cpp
+src/_PathSmoothCurvetoRel.cpp
+src/_PathSmoothQuadraticCurvetoAbs.cpp
+src/_PathSmoothQuadraticCurvetoRel.cpp
+src/_Pixels.cpp
src/_Pixels.h
+src/_QuantumOperator.cpp
+src/_QuantumType.cpp
+src/_RenderingIntent.cpp
+src/_ResolutionType.cpp
+src/_STL.cpp
+src/_SparseColorMethod.cpp
+src/_StorageType.cpp
+src/_StretchType.cpp
+src/_StyleType.cpp
+src/_TypeMetric.cpp
+src/_VPath.cpp
+src/_VirtualPixelMethod.cpp
+src/_gminfo.cpp
+src/_main.cpp
test/test_cookbook.py
test/test_pgmagick_api.py
test/test_pgmagick_blob.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pgmagick-0.7.6/pyproject.toml
new/pgmagick-0.8/pyproject.toml
--- old/pgmagick-0.7.6/pyproject.toml 1970-01-01 01:00:00.000000000 +0100
+++ new/pgmagick-0.8/pyproject.toml 2025-12-29 01:41:34.000000000 +0100
@@ -0,0 +1,39 @@
+[build-system]
+requires = ["setuptools>=77.0", "wheel"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "pgmagick"
+dynamic = ["version"]
+description = "Yet Another Python wrapper for GraphicsMagick"
+readme = "README.rst"
+license-files = ["LICENSE"]
+authors = [
+ {name = "Hideo Hattori", email = "[email protected]"}
+]
+keywords = ["GraphicsMagick", "ImageMagick", "graphics", "boost", "image"]
+classifiers = [
+ "Development Status :: 4 - Beta",
+ "Intended Audience :: Developers",
+ "Operating System :: POSIX",
+ "Programming Language :: C++",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3",
+ "Programming Language :: Python :: 3.10",
+ "Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3.14",
+ "Topic :: Multimedia :: Graphics",
+]
+requires-python = ">=3.10"
+
+[project.urls]
+Homepage = "https://github.com/hhatto/pgmagick"
+Repository = "https://github.com/hhatto/pgmagick"
+
+[tool.setuptools.dynamic]
+version = {attr = "pgmagick._version.__version__"}
+
+[tool.setuptools.packages.find]
+include = ["pgmagick*"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pgmagick-0.7.6/setup.py new/pgmagick-0.8/setup.py
--- old/pgmagick-0.7.6/setup.py 2021-04-21 17:28:18.000000000 +0200
+++ new/pgmagick-0.8/setup.py 2025-12-29 01:41:34.000000000 +0100
@@ -1,11 +1,9 @@
-from setuptools import setup, find_packages, Extension
-from distutils.sysconfig import get_python_inc
+from setuptools import setup, Extension
+from sysconfig import get_path
import glob
import os
import re
import sys
-import ast
-import io
GMCPP_PC = 'GraphicsMagick++.pc'
IMCPP_PC = 'ImageMagick++.pc'
@@ -20,7 +18,7 @@
(1, 3, 6),
(1, 3, 'x')
)
-include_dirs = [get_python_inc()]
+include_dirs = [get_path('include')]
library_dirs = []
search_include_dirs = ['/usr/local/include/GraphicsMagick/',
@@ -35,6 +33,8 @@
'/usr/lib64/pkgconfig',
]
if sys.platform.lower() == 'darwin':
+ include_dirs.append('/opt/homebrew/include/')
+ library_dirs.append('/opt/homebrew/lib')
if os.path.exists('/opt/local/include'):
include_dirs.append('/opt/local/include/')
else:
@@ -45,6 +45,7 @@
'/usr/local/Cellar/graphicsmagick'])
search_library_dirs.extend(['/opt/local/lib/',
'/opt/homebrew/lib',
+ '/usr/local/Cellar/boost-python3',
'/usr/local/Cellar/graphicsmagick'])
# for ImageMagick
search_include_dirs.extend(['/usr/local/include/ImageMagick/',
@@ -66,6 +67,14 @@
print('adding extra pkgconfig directory %s' % extra_pkgconfig_dir)
search_pkgconfig_dirs.insert(0, extra_pkgconfig_dir)
+if 'INCLUDE_PATH' in os.environ:
+ for include_path in os.environ['INCLUDE_PATH'].split(','):
+ include_dirs.append(include_path)
+
+if 'LIBRARY_PATH' in os.environ:
+ for library_path in os.environ['LIBRARY_PATH'].split(','):
+ library_dirs.append(library_path)
+
def _grep(regex, filename):
for line in open(filename):
@@ -76,7 +85,7 @@
def get_version_from_devheaders(search_dirs):
target_api_name = "addNoiseChannel"
for dirname in search_dirs:
- for root, dirs, files in os.walk(dirname):
+ for root, _, files in os.walk(dirname):
for f in files:
if f == 'Image.h':
if _grep(target_api_name, os.path.join(root, 'Image.h')):
@@ -86,7 +95,7 @@
def get_version_from_pc(search_dirs, target):
"""similar to 'pkg-config --modversion GraphicsMagick++'"""
for dirname in search_dirs:
- for root, dirs, files in os.walk(dirname):
+ for root, _, files in os.walk(dirname):
for f in files:
if f == target:
file_path = os.path.join(root, target)
@@ -125,7 +134,8 @@
api_version = sequence_type(0 if num == 'x' else num for num in
api_version)
if different_major_breaks_support and library_version[0] != api_version[0]:
return False
- assert len(api_version) <= 3 # otherwise following comparision won't
work as intended, e.g. (2, 0, 0) > (2, 0, 0, 0)
+ # otherwise following comparision won't work as intended, e.g. (2, 0, 0) >
(2, 0, 0, 0)
+ assert len(api_version) <= 3
return library_version >= api_version
@@ -137,33 +147,36 @@
include_dirs.append(header_path)
# find to library path for boost_python
-# TODO: only test on Ubuntu11.10
_python_version = sys.version_info
-boost_lib_target_files = []
-if _python_version >= (3, ):
- boost_lib_target_files.append("boost_python-py%s%s" % (_python_version[0],
_python_version[1]))
- # ArchLinux uses boost_python3
- boost_lib_target_files.append("boost_python3")
- boost_lib_target_files.append("boost_python3-mt")
-boost_lib_target_files.append("boost_python-mt-py%s%s" % (_python_version[0],
_python_version[1]))
-# gentoo appends the python version numbers to the boost_python libraries
-boost_lib_target_files.append("boost_python-%s.%s" % (_python_version[0],
_python_version[1]))
-boost_lib_target_files.append("boost_python-mt")
-# Homebrew's boost_python
-boost_lib_target_files.append("boost_python%s%s" % (_python_version[0],
_python_version[1]))
-boost_lib_target_files.append("boost_python%s%s-mt" % (_python_version[0],
_python_version[1]))
+boost_lib_target_files = [
+ "boost_python-py%s%s" % (_python_version[0], _python_version[1]),
+ "boost_python3",
+ "boost_python3-mt",
+ "boost_python-mt-py%s%s" % (_python_version[0], _python_version[1]),
+ "boost_python-%s.%s" % (_python_version[0], _python_version[1]),
+ "boost_python-mt",
+ "boost_python%s%s" % (_python_version[0], _python_version[1]),
+ "boost_python%s%s-mt" % (_python_version[0], _python_version[1]),
+]
+print("boost_lib_target_files:", boost_lib_target_files)
+
+lib_path = None
+boost_library = None
for boost_lib in boost_lib_target_files:
lib_path = find_file('lib%s.' % boost_lib, search_library_dirs)
if lib_path:
+ boost_library = boost_lib
+ print("lib_path=%s, boost_lib=%s", lib_path, boost_lib)
break
if not lib_path:
- boost_lib = "boost_python"
-print("boost lib: %s" % boost_lib)
+ boost_library = "boost_python"
+ print("use default boost python lib")
+print("boost lib: %s" % boost_library)
-libraries = [boost_lib]
+libraries = [boost_library]
# find to library path for Magick
lib_path = find_file('libGraphicsMagick++', search_library_dirs)
@@ -180,6 +193,8 @@
raise Exception("libGraphicsMagick++ (or libMagick++) not found")
library_dirs.append(lib_path)
+print("library_dirs: %s" % library_dirs)
+
# get version and extra compile argument
ext_compile_args = []
if LIBRARY == 'GraphicsMagick':
@@ -198,7 +213,9 @@
if LIBRARY == 'GraphicsMagick':
# 1.3.6 for not Ubuntu10.04
_supported_api_versions = (v for v in TESTED_API_VERSIONS if
library_supports_api(_version, v))
- ext_compile_args = ["-DPGMAGICK_LIB_GRAPHICSMAGICK_" +
'_'.join(map(str, version)) for version in _supported_api_versions]
+ ext_compile_args = [
+ "-DPGMAGICK_LIB_GRAPHICSMAGICK_" + '_'.join(map(str, version)) for
version in _supported_api_versions
+ ]
elif LIBRARY == 'ImageMagick':
ext_compile_args = ["-DPGMAGICK_LIB_IMAGEMAGICK"]
ext_compile_args.append("-D_LIBRARY_VERSION=\"%s\"" % (_str_version))
@@ -206,37 +223,13 @@
_version = '%s version: ???' % (LIBRARY)
-def version():
- """Return version string."""
- with io.open('pgmagick/_version.py') as input_file:
- for line in input_file:
- if line.startswith('__version__'):
- return ast.parse(line).body[0].value.s
-
-
-setup(name='pgmagick',
- version=version(),
- description="Yet Another Python wrapper for GraphicsMagick",
- long_description=open('README.rst').read(),
- author='Hideo Hattori',
- author_email='[email protected]',
- url='https://github.com/hhatto/pgmagick',
- license='MIT',
- packages=find_packages(),
- ext_modules=[
- Extension('pgmagick._pgmagick',
- sources=sorted(glob.glob('./src/*.cpp')),
- include_dirs=include_dirs,
- library_dirs=library_dirs,
- libraries=libraries,
- extra_compile_args=ext_compile_args)],
- classifiers=[
- 'Development Status :: 4 - Beta',
- 'Intended Audience :: Developers',
- 'License :: OSI Approved :: MIT License',
- 'Operating System :: POSIX',
- 'Programming Language :: C++',
- 'Programming Language :: Python',
- 'Programming Language :: Python :: 3',
- 'Topic :: Multimedia :: Graphics'],
- keywords="GraphicsMagick ImageMagick graphics boost image")
+setup(
+ ext_modules=[
+ Extension('pgmagick._pgmagick',
+ sources=sorted(glob.glob('./src/*.cpp')),
+ include_dirs=include_dirs,
+ library_dirs=library_dirs,
+ libraries=libraries,
+ extra_compile_args=ext_compile_args)
+ ]
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pgmagick-0.7.6/test/test_cookbook.py
new/pgmagick-0.8/test/test_cookbook.py
--- old/pgmagick-0.7.6/test/test_cookbook.py 2021-01-02 17:15:49.000000000
+0100
+++ new/pgmagick-0.8/test/test_cookbook.py 2025-12-28 11:14:51.000000000
+0100
@@ -1,11 +1,10 @@
-# coding: utf-8
import os.path
import sys
import unittest
from pgmagick import api
from pgmagick import Image, Geometry, Blob
-from utils import MACOSX_FONT
+from utils import LINUX_FONT, MACOSX_FONT
class TestCookbook(unittest.TestCase):
@@ -36,6 +35,8 @@
img = api.Image((300, 200))
if sys.platform.lower() == 'darwin':
img.font(MACOSX_FONT)
+ elif sys.platform.lower() == 'linux':
+ img.font(LINUX_FONT)
img.annotate('Hello World')
img.write(self.tmp_filename_png)
@@ -43,6 +44,8 @@
img = api.Image((300, 200))
if sys.platform.lower() == 'darwin':
img.font(MACOSX_FONT)
+ elif sys.platform.lower() == 'linux':
+ img.font(LINUX_FONT)
img.annotate('Hello World', angle=45)
img.write(self.tmp_filename_png)
@@ -50,9 +53,8 @@
img = api.Image((300, 200))
if sys.platform.lower() == 'darwin':
img.font("/System/Library/Fonts/Hiragino Sans GB.ttc")
- else:
- # TODO: not support windows
- img.font("/usr/share/fonts/truetype/ttf-japanese-gothic.ttf")
+ elif sys.platform.lower() == 'linux':
+ img.font(LINUX_FONT)
img.annotate('ようこそpgmagickへ!!')
img.write(self.tmp_filename_png)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pgmagick-0.7.6/test/test_pgmagick_api.py
new/pgmagick-0.8/test/test_pgmagick_api.py
--- old/pgmagick-0.7.6/test/test_pgmagick_api.py 2021-01-02
17:15:49.000000000 +0100
+++ new/pgmagick-0.8/test/test_pgmagick_api.py 2025-12-28 11:14:51.000000000
+0100
@@ -6,7 +6,7 @@
import pgmagick
from pgmagick.api import Image, Draw
-from utils import MACOSX_FONT
+from utils import LINUX_FONT, MACOSX_FONT
print(pgmagick.gminfo().version)
@@ -52,6 +52,8 @@
img = Image((600, 400), 'gradient:#ffffff-#000000')
if sys.platform.lower() == 'darwin':
img.font(MACOSX_FONT)
+ elif sys.platform.lower() == 'linux':
+ img.font(LINUX_FONT)
img.annotate("hello", (100, 100))
if k != "None":
img.scale(0.6, k)
@@ -97,6 +99,8 @@
self.assertEqual(float, type(img.font_pointsize()))
if sys.platform.lower() == 'darwin':
img.font(MACOSX_FONT)
+ elif sys.platform.lower() == 'linux':
+ img.font(LINUX_FONT)
img.annotate("hello", (100, 100))
img.write('t.png')
@@ -186,6 +190,8 @@
def test_font_style_italic(self):
if sys.platform.lower() == 'darwin':
self.skipTest("DrawableFont() is broken")
+ elif sys.platform.lower() == 'linux':
+ self.img.font(LINUX_FONT)
self.d.font('vera.ttf', 'italic')
self.d.text(30, 30, "hello pgmagick")
self.img.draw(self.d)
@@ -194,6 +200,8 @@
def test_font_style_oblique(self):
if sys.platform.lower() == 'darwin':
self.skipTest("DrawableFont() is broken")
+ elif sys.platform.lower() == 'linux':
+ self.img.font(LINUX_FONT)
self.d.font('vera.ttf', 'oblique')
self.d.text(30, 30, "hello pgmagick")
self.img.draw(self.d)
@@ -202,6 +210,8 @@
def test_font_stretch_ultracondensed(self):
if sys.platform.lower() == 'darwin':
self.skipTest("DrawableFont() is broken")
+ elif sys.platform.lower() == 'linux':
+ self.img.font(LINUX_FONT)
self.d.font('vera.ttf', 'oblique', stretch='ultracondensed')
self.d.text(30, 30, "hello pgmagick")
self.img.draw(self.d)
@@ -210,6 +220,8 @@
def test_font_stretch_extraexpanded(self):
if sys.platform.lower() == 'darwin':
self.skipTest("DrawableFont() is broken")
+ elif sys.platform.lower() == 'linux':
+ self.img.font(LINUX_FONT)
self.d.font('vera.ttf', 'oblique', stretch='extraexpanded')
self.d.text(30, 30, "hello pgmagick")
self.img.draw(self.d)
@@ -218,6 +230,8 @@
def test_font_weight100(self):
if sys.platform.lower() == 'darwin':
self.skipTest("DrawableFont() is broken")
+ elif sys.platform.lower() == 'linux':
+ self.img.font(LINUX_FONT)
self.d.font('vera.ttf', weight=100)
self.d.text(30, 30, "hello pgmagick")
self.img.draw(self.d)
@@ -226,6 +240,8 @@
def test_font_bold(self):
if sys.platform.lower() == 'darwin':
self.skipTest("DrawableFont() is broken")
+ elif sys.platform.lower() == 'linux':
+ self.img.font(LINUX_FONT)
self.d.font('vera.ttf', weight='bold')
self.d.text(30, 30, "hello pgmagick")
self.img.draw(self.d)
@@ -234,6 +250,8 @@
def test_gravity(self):
if sys.platform.lower() == 'darwin':
self.skipTest("DrawableFont() is broken")
+ elif sys.platform.lower() == 'linux':
+ self.img.font(LINUX_FONT)
self.d.gravity('center')
self.d.text(0, 0, "hello pgmagick")
self.img.draw(self.d)
@@ -401,6 +419,8 @@
def test_text(self):
if sys.platform.lower() == 'darwin':
self.skipTest("DrawableFont() is broken")
+ elif sys.platform.lower() == 'linux':
+ self.img.font(LINUX_FONT)
self.d.text(30, 30, "hello pgmagick")
self.img.draw(self.d)
self.img.write('t.png')
@@ -408,6 +428,8 @@
def test_text_antialias(self):
if sys.platform.lower() == 'darwin':
self.skipTest("DrawableFont() is broken")
+ elif sys.platform.lower() == 'linux':
+ self.img.font(LINUX_FONT)
self.d.font('courier', weight='bold')
self.d.pointsize(70)
self.d.text_antialias(False)
@@ -420,6 +442,8 @@
def test_text_decoration(self):
if sys.platform.lower() == 'darwin':
self.skipTest("DrawableFont() is broken")
+ elif sys.platform.lower() == 'linux':
+ self.img.font(LINUX_FONT)
self.d.pointsize(70)
self.d.text_decoration('overline')
self.d.text(30, 100, "hello pgmagick")
@@ -433,6 +457,8 @@
def test_text_undercolor(self):
if sys.platform.lower() == 'darwin':
self.skipTest("DrawableFont() is broken")
+ elif sys.platform.lower() == 'linux':
+ self.img.font(LINUX_FONT)
self.d.pointsize(70)
self.d.text_undercolor('lime')
self.d.text(30, 100, "hello pgmagick")
++++++ utils.py ++++++
--- /var/tmp/diff_new_pack.gxzSA2/_old 2026-01-27 16:17:55.344014382 +0100
+++ /var/tmp/diff_new_pack.gxzSA2/_new 2026-01-27 16:17:55.352014716 +0100
@@ -1,2 +1,3 @@
MACOSX_FONT = "/System/Library/Fonts/Keyboard.ttf"
+LINUX_FONT = "/usr/share/fonts/truetype/noto/NotoSansMono-Regular.ttf"