mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-02-03 21:24:31 +03:00
Changed _limit_signed_rational
This commit is contained in:
parent
69fc041399
commit
8924054dd9
|
@ -277,7 +277,7 @@ class TestFileTiffMetadata(PillowTestCase):
|
|||
self.assertEqual(denominator, reloaded.tag_v2[37380].denominator)
|
||||
|
||||
# out of bounds of 4 byte signed long
|
||||
numerator = -2 ** 31 - 1
|
||||
numerator = -(2 ** 31) - 1
|
||||
denominator = 1
|
||||
|
||||
info[37380] = TiffImagePlugin.IFDRational(numerator, denominator)
|
||||
|
@ -286,8 +286,8 @@ class TestFileTiffMetadata(PillowTestCase):
|
|||
im.save(out, tiffinfo=info, compression="raw")
|
||||
|
||||
reloaded = Image.open(out)
|
||||
self.assertEqual(- 2 ** 31, reloaded.tag_v2[37380].numerator)
|
||||
self.assertEqual(1, reloaded.tag_v2[37380].denominator)
|
||||
self.assertEqual(2 ** 31 - 1, reloaded.tag_v2[37380].numerator)
|
||||
self.assertEqual(-1, reloaded.tag_v2[37380].denominator)
|
||||
|
||||
def test_ifd_signed_long(self):
|
||||
im = hopper()
|
||||
|
|
|
@ -263,20 +263,18 @@ def _limit_rational(val, max_val):
|
|||
return n_d[::-1] if inv else n_d
|
||||
|
||||
|
||||
def _limit_signed_rational(frac, max_val, min_val):
|
||||
if frac >= 0:
|
||||
return _limit_rational(frac, max_val)
|
||||
def _limit_signed_rational(val, max_val, min_val):
|
||||
frac = Fraction(val)
|
||||
n_d = frac.numerator, frac.denominator
|
||||
|
||||
max_abs = max(max_val, abs(min_val))
|
||||
if min(n_d) < min_val:
|
||||
n_d = _limit_rational(val, abs(min_val))
|
||||
|
||||
num, denom = _limit_rational(frac, max_abs)
|
||||
if denom == max_abs or num == max_abs:
|
||||
if (num < 0 or denom < 0) and num != denom:
|
||||
num, denom = num * -1, denom * -1
|
||||
else:
|
||||
num, denom = _limit_rational(frac, max_val)
|
||||
if max(n_d) > max_val:
|
||||
val = Fraction(*n_d)
|
||||
n_d = _limit_rational(val, max_val)
|
||||
|
||||
return num, denom
|
||||
return n_d
|
||||
|
||||
|
||||
##
|
||||
|
|
Loading…
Reference in New Issue
Block a user