From 931caa4335419baab54f2796024213f730232482 Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Tue, 27 Feb 2018 16:23:01 -0500 Subject: [PATCH] add a script that can downsize uploads --- script/downsize_uploads.rb | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 script/downsize_uploads.rb diff --git a/script/downsize_uploads.rb b/script/downsize_uploads.rb new file mode 100644 index 00000000000..0239008a1a4 --- /dev/null +++ b/script/downsize_uploads.rb @@ -0,0 +1,31 @@ +require File.expand_path("../../config/environment", __FILE__) + +# no less than 1 megapixel +max_image_pixels = [ARGV[0].to_i, 1_000_000].max + +puts '', "Downsizing uploads size to no more than #{max_image_pixels} pixels" + +Upload.where("lower(extension) in (?)", ['jpg', 'gif', 'png']).find_each do |upload| + absolute_path = Discourse.store.path_for(upload) + if absolute_path && FileHelper.is_image?(upload.original_filename) + file = File.new(absolute_path) rescue nil + next unless file + + image_info = FastImage.new(file) rescue nil + pixels = image_info.size&.reduce(:*).to_i + + if pixels > max_image_pixels + OptimizedImage.downsize(file.path, file.path, "#{max_image_pixels}@", filename: upload.original_filename) + + upload.filesize = File.size(file) + upload.width, upload.height = ImageSizer.resize(*FastImage.new(file).size) + upload.save! + + upload.posts.each do |post| + Jobs.enqueue(:process_post, post_id: post.id, bypass_bump: true, cook: true) + end + end + end +end + +puts '', 'Done', ''