media file: fix exception when getting frame count of corrupted gif.
Fix a `gifload: no frames in GIF` error from libvips when trying to read the frame count for https://danbooru.donmai.us/media_assets/1141668.
This commit is contained in:
@@ -40,7 +40,7 @@ class MediaFile::Image < MediaFile
|
||||
def frame_count
|
||||
case file_ext
|
||||
when :gif, :webp
|
||||
image.get("n-pages") if image.get_fields.include?("n-pages")
|
||||
n_pages
|
||||
when :png
|
||||
metadata.fetch("PNG:AnimationFrames", 1)
|
||||
when :avif
|
||||
@@ -50,6 +50,13 @@ class MediaFile::Image < MediaFile
|
||||
end
|
||||
end
|
||||
|
||||
# @return [Integer, nil] The frame count for gif and webp images, or possibly nil if the file doesn't have a frame count or is corrupt.
|
||||
def n_pages
|
||||
image.get("n-pages")
|
||||
rescue Vips::Error
|
||||
nil
|
||||
end
|
||||
|
||||
def frame_rate
|
||||
return nil if !is_animated? || frame_count.nil? || duration.nil? || duration == 0
|
||||
frame_count / duration
|
||||
|
||||
Reference in New Issue
Block a user