Files
davideisinger.com/bin/dither/dither.rb
2024-02-02 14:27:32 -05:00

61 lines
1.2 KiB
Ruby

require "sinatra"
require "mini_magick"
MiniMagick.logger.level = Logger::DEBUG
ROOT = ENV["ROOT"]
KEY = ENV["KEY"]
DITHER = ENV["DITHER"] != "0"
EXTENSION, CONTENT_TYPE = if DITHER
[".png", "image/png"]
else
[".webp", "image/webp"]
end
FileUtils.mkdir_p "tmp"
get "/*" do |path|
filename = File.basename(path)
geometry = params["geo"] unless params["geo"] == ""
@decrypted = Tempfile.new(filename, "tmp")
@dithered = Tempfile.new([filename, EXTENSION], "tmp")
%x(
openssl \
aes-256-cbc \
-d \
-in #{ROOT}/#{path}.enc \
-out #{@decrypted.path} \
-pass file:#{KEY} \
-iter 1000000
)
convert = MiniMagick::Tool::Convert.new
convert << @decrypted.path
convert.background("white")
convert.layers("flatten")
if geometry
if geometry.start_with?("x") || geometry.end_with?("x")
convert.resize geometry
else
convert.resize "#{geometry}^"
convert.gravity "center"
convert.extent geometry
end
end
if DITHER
convert.ordered_dither "o8x8"
convert.monochrome
end
convert << @dithered.path
convert.call
content_type CONTENT_TYPE
File.open(@dithered.path)
end