Move lib/danbooru, lib/danbooru_image_resizer to app/logical.
This commit is contained in:
51
app/logical/danbooru_image_resizer.rb
Normal file
51
app/logical/danbooru_image_resizer.rb
Normal file
@@ -0,0 +1,51 @@
|
||||
module DanbooruImageResizer
|
||||
def resize(read_path, write_path, width, height, resize_quality = 90)
|
||||
image = Magick::Image.read(read_path).first
|
||||
geometry = "#{width}x>"
|
||||
|
||||
if width == Danbooru.config.small_image_width
|
||||
# wider than it is tall
|
||||
geometry = "#{Danbooru.config.small_image_width}x#{Danbooru.config.small_image_width}>"
|
||||
end
|
||||
|
||||
image.change_geometry(geometry) do |new_width, new_height, img|
|
||||
img.resize!(new_width, new_height)
|
||||
width = new_width
|
||||
height = new_height
|
||||
end
|
||||
|
||||
image = flatten(image, width, height)
|
||||
image.strip!
|
||||
|
||||
image.write(write_path) do
|
||||
self.quality = resize_quality
|
||||
# setting PlaneInterlace enables progressive encoding for JPEGs
|
||||
self.interlace = Magick::PlaneInterlace
|
||||
end
|
||||
|
||||
image.destroy!
|
||||
FileUtils.chmod(0664, write_path)
|
||||
end
|
||||
|
||||
def flatten(image, width, height)
|
||||
if image.alpha?
|
||||
# since jpeg can't represent transparency, we need to create an image list,
|
||||
# put a white image on the bottom, then flatten it.
|
||||
|
||||
list = Magick::ImageList.new
|
||||
list.new_image(width, height) do
|
||||
self.background_color = "#FFFFFF"
|
||||
end
|
||||
list << image
|
||||
flattened_image = list.flatten_images
|
||||
list.each do |image|
|
||||
image.destroy!
|
||||
end
|
||||
return flattened_image
|
||||
else
|
||||
return image
|
||||
end
|
||||
end
|
||||
|
||||
module_function :resize, :flatten
|
||||
end
|
||||
Reference in New Issue
Block a user