posts: fix incorrect exif rotation for PNGs.

Fix a bug where where PNG images could be incorrectly detected as
exif-rotated. This would happen when a PNG contained the
IFD0:Orientation flag. It's technically possible for a PNG to contain
this flag, but it's ignored by libvips and by browsers.

post #3762340 (nsfw) is an example of a PNG like this.

The fix is to use `autorot` to let libvips apply the rotation instead of
trying to interpret the exif data ourselves. Note that libvips-8.9 has a
bug where it doesn't strip the orientation flag after applying
`autorot`, which leads to the image being incorrectly rotated a second
time when generating the thumbnail. Use libvips-8.11 instead.
This commit is contained in:
evazion
2021-09-22 22:48:44 -05:00
parent 9c0ab258cb
commit 74b03a7bd0
5 changed files with 24 additions and 20 deletions

View File

@@ -49,7 +49,7 @@ class MediaAsset < ApplicationRecord
# https://exiftool.org/TagNames/EXIF.html
def is_rotated?
metadata["IFD0:Orientation"].in?(["Rotate 90 CW", "Rotate 270 CW", "Rotate 180"])
file_ext == "jpg" && metadata["IFD0:Orientation"].in?(["Rotate 90 CW", "Rotate 270 CW", "Rotate 180"])
end
# Some animations technically have a finite loop count, but loop for hundreds