Skip to content

Commit

Permalink
Allow float center for rotate operations
Browse files Browse the repository at this point in the history
  • Loading branch information
radarhere committed Jun 8, 2024
1 parent 5bacce9 commit 0d73721
Showing 1 changed file with 5 additions and 8 deletions.
13 changes: 5 additions & 8 deletions src/PIL/Image.py
Original file line number Diff line number Diff line change
Expand Up @@ -2305,7 +2305,7 @@ def rotate(
angle: float,
resample: Resampling = Resampling.NEAREST,
expand: int | bool = False,
center: tuple[int, int] | None = None,
center: tuple[float, float] | None = None,
translate: tuple[int, int] | None = None,
fillcolor: float | tuple[float, ...] | str | None = None,
) -> Image:
Expand Down Expand Up @@ -2373,10 +2373,7 @@ def rotate(
else:
post_trans = translate
if center is None:
# FIXME These should be rounded to ints?
rotn_center = (w / 2.0, h / 2.0)
else:
rotn_center = center
center = (w / 2, h / 2)

angle = -math.radians(angle)
matrix = [
Expand All @@ -2393,10 +2390,10 @@ def transform(x, y, matrix):
return a * x + b * y + c, d * x + e * y + f

matrix[2], matrix[5] = transform(
-rotn_center[0] - post_trans[0], -rotn_center[1] - post_trans[1], matrix
-center[0] - post_trans[0], -center[1] - post_trans[1], matrix
)
matrix[2] += rotn_center[0]
matrix[5] += rotn_center[1]
matrix[2] += center[0]
matrix[5] += center[1]

if expand:
# calculate output size
Expand Down

0 comments on commit 0d73721

Please sign in to comment.