Make dither server more efficient
All checks were successful
Deploy / deploy (push) Successful in 9m4s

This commit is contained in:
David Eisinger
2026-04-08 23:02:20 -04:00
parent 2ca66ed400
commit 778cae07b9

View File

@@ -1,5 +1,6 @@
require "sinatra" require "sinatra"
require "mini_magick" require "mini_magick"
require "tempfile"
MiniMagick.logger.level = Logger::DEBUG MiniMagick.logger.level = Logger::DEBUG
@@ -16,37 +17,50 @@ get "/*" do |path|
geometry = params["geo"] unless params["geo"] == "" geometry = params["geo"] unless params["geo"] == ""
geometry.gsub!(/\d+/) { |n| n.to_i * 2 } if geometry && !DITHER geometry.gsub!(/\d+/) { |n| n.to_i * 2 } if geometry && !DITHER
decrypted = %x( decrypted = Tempfile.new(["dither", File.extname(path)])
openssl \ decrypted.binmode
aes-256-cbc \ decrypted.close
-d \
-in #{ROOT}/#{path}.enc \
-pass file:#{KEY} \
-iter 1000000
)
convert = MiniMagick::Tool::Convert.new begin
convert.stdin openssl_ok = system(
convert.background("white") "openssl",
convert.layers("flatten") "aes-256-cbc",
convert.strip "-d",
convert.auto_orient "-in", "#{ROOT}/#{path}.enc",
"-out", decrypted.path,
"-pass", "file:#{KEY}",
"-iter", "1000000"
)
halt 500, {"Content-Type" => "text/plain"}, "decrypt failed" unless openssl_ok
if geometry convert = MiniMagick::Tool::Convert.new
if geometry.match?(/^\d+x\d+$/) convert.limit("memory", "128MiB")
convert.resize "#{geometry}^" convert.limit("map", "256MiB")
convert.gravity "center" convert.limit("disk", "1GiB")
convert.extent geometry convert << decrypted.path
else convert.background("white")
convert.resize geometry convert.layers("flatten")
convert.strip
convert.auto_orient
if geometry
if geometry.match?(/^\d+x\d+$/)
convert.resize "#{geometry}^"
convert.gravity "center"
convert.extent geometry
else
convert.resize geometry
end
end end
end
if DITHER if DITHER
convert.ordered_dither "o8x8" convert.ordered_dither "o8x8"
convert.monochrome convert.monochrome
end end
convert << "#{FORMAT.upcase}:-" convert << "#{FORMAT.upcase}:-"
convert.call(stdin: decrypted) convert.call
ensure
decrypted.unlink
end
end end