Skip to content

Commit

Permalink
New logic for getting resampling method, for compatibility with newer…
Browse files Browse the repository at this point in the history
… Pillow versions.
  • Loading branch information
joeraz committed Jul 2, 2023
1 parent d2358c4 commit 75a3000
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 12 deletions.
11 changes: 11 additions & 0 deletions pysollib/mfxutil.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,17 @@ def format_time(t):
return "%d:%02d:%02d" % (t // 3600, (t % 3600) // 60, t % 60)


def get_default_resampling():
if not USE_PIL:
return 0
elif hasattr(Image, "ANTIALIAS"):
return Image.ANTIALIAS
elif hasattr(Image, "LANCZOS"):
return Image.LANCZOS
else:
return Image.NEAREST


def print_err(s, level=1):
if level == 0:
ss = PACKAGE+': ERROR:'
Expand Down
6 changes: 4 additions & 2 deletions pysollib/options.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
import configobj

import pysollib.settings
from pysollib.mfxutil import Image, USE_PIL, print_err
from pysollib.mfxutil import USE_PIL,\
get_default_resampling, print_err
from pysollib.mygettext import _
from pysollib.mygettext import myGettext
from pysollib.pysoltk import STATUSBAR_ITEMS, TOOLBAR_BUTTONS, TOOLKIT
Expand Down Expand Up @@ -474,7 +475,8 @@ def __init__(self):
self.tabletile_scale_method = 0
self.resampling = 0
if USE_PIL:
self.resampling = int(Image.ANTIALIAS)
self.resampling = int(get_default_resampling())

# solver
self.solver_presets = [
'none',
Expand Down
12 changes: 6 additions & 6 deletions pysollib/ui/tktile/menubar.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,32 +94,32 @@ def createResamplingMenu(menubar, menu):
variable=menubar.tkopt.resampling,
value=int(Image.NEAREST),
command=menubar.mOptResampling)
if Image.BILINEAR:
if hasattr(Image, "BILINEAR"):
submenu.add_radiobutton(label=n_("&Bilinear"),
variable=menubar.tkopt.resampling,
value=int(Image.BILINEAR),
command=menubar.mOptResampling)
if Image.BICUBIC:
if hasattr(Image, "BICUBIC"):
submenu.add_radiobutton(label=n_("B&icubic"),
variable=menubar.tkopt.resampling,
value=int(Image.BICUBIC),
command=menubar.mOptResampling)
if Image.LANCZOS:
if hasattr(Image, "LANCZOS"):
submenu.add_radiobutton(label=n_("&Lanczos"),
variable=menubar.tkopt.resampling,
value=int(Image.LANCZOS),
command=menubar.mOptResampling)
elif Image.ANTIALIAS:
elif hasattr(Image, "ANTIALIAS"):
submenu.add_radiobutton(label=n_("&Antialiasing"),
variable=menubar.tkopt.resampling,
value=int(Image.ANTIALIAS),
command=menubar.mOptResampling)
if Image.BOX:
if hasattr(Image, "BOX"):
submenu.add_radiobutton(label=n_("B&ox"),
variable=menubar.tkopt.resampling,
value=int(Image.BOX),
command=menubar.mOptResampling)
if Image.HAMMING:
if hasattr(Image, "HAMMING"):
submenu.add_radiobutton(label=n_("&Hamming"),
variable=menubar.tkopt.resampling,
value=int(Image.HAMMING),
Expand Down
15 changes: 11 additions & 4 deletions pysollib/ui/tktile/tkutil.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@
import os
import re

from pysollib.mfxutil import Image, ImageDraw, ImageOps, ImageTk
from pysollib.mfxutil import Image, ImageDraw, ImageOps, ImageTk, \
get_default_resampling
from pysollib.settings import TITLE, WIN_SYSTEM

from six.moves import tkinter
Expand Down Expand Up @@ -288,7 +289,10 @@ def subsample(self, r):
im = PIL_Image(image=im)
return im

def resize(self, xf, yf, resample=Image.ANTIALIAS):
def resize(self, xf, yf, resample=-1):

if resample == -1:
resample = get_default_resampling()

w, h = self._pil_image_orig.size
w0, h0 = int(w*xf), int(h*yf)
Expand Down Expand Up @@ -456,7 +460,10 @@ def _createBottomImage(image, color='white', backfile=None):
size = (w-th*2, h-th*2)
tmp = Image.new('RGBA', size, color)
tmp.putalpha(60)
mask = out.resize(size, Image.ANTIALIAS)

resampling = get_default_resampling()

mask = out.resize(size, resampling)
out.paste(tmp, (th, th), mask)
if backfile:
back = Image.open(backfile).convert('RGBA')
Expand All @@ -465,7 +472,7 @@ def _createBottomImage(image, color='white', backfile=None):
a = min(float(w1)/w0, float(h1)/h0)
a = a*0.9
w0, h0 = int(w0*a), int(h0*a)
back = back.resize((w0, h0), Image.ANTIALIAS)
back = back.resize((w0, h0), resampling)
x, y = (w1 - w0) // 2, (h1 - h0) // 2
out.paste(back, (x, y), back)
return out
Expand Down

5 comments on commit 75a3000

@scottfurry
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Commit resolves issue on Gentoo X86_64 with Pillow v10.0.0.
Recommend point release/tagged version for Linux distributions to pick up.

@joeraz
Copy link
Collaborator Author

@joeraz joeraz commented on 75a3000 Jul 3, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can do a release, but the continuous integration error needs to be fixed first, or I would not be able to properly generate the release packages.

@scottfurry
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Understood. FWIW, a couple of other projects where I kibitz have also recently had issues with CI.

@thesamesam
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heh, only just noticing this for Gentoo because someone else filed a bug. I'll backport it now.

@joeraz
Copy link
Collaborator Author

@joeraz joeraz commented on 75a3000 Jul 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The fix has been released as part of 2.21.0.

Please sign in to comment.