mirror of
https://github.com/neocities/neocities.git
synced 2025-04-24 17:22:35 +02:00
40 lines
No EOL
1.2 KiB
Ruby
40 lines
No EOL
1.2 KiB
Ruby
require 'RMagick'
|
|
|
|
class ScreenshotWorker
|
|
REQUIRED_RESOLUTIONS = ['235x141', '105x63', '270x162']
|
|
SCREENSHOTS_PATH = File.join DIR_ROOT, 'public', 'site_screenshots'
|
|
include Sidekiq::Worker
|
|
sidekiq_options queue: :screenshots, retry: 3, backtrace: true
|
|
|
|
def perform(username, filename)
|
|
screenshot = Tempfile.new 'neocities_screenshot'
|
|
screenshot.close
|
|
screenshot_output_path = screenshot.path+'.png'
|
|
|
|
f = Screencap::Fetcher.new("http://#{username}.neocities.org/#{filename}")
|
|
f.fetch(
|
|
output: screenshot_output_path,
|
|
width: 1280,
|
|
height: 720
|
|
)
|
|
|
|
|
|
img_list = Magick::ImageList.new
|
|
img_list.from_blob File.read(screenshot_output_path)
|
|
|
|
screenshot.unlink
|
|
File.unlink screenshot_output_path
|
|
|
|
img_list.new_image(img_list.first.columns, img_list.first.rows) { self.background_color = "white" }
|
|
img = img_list.reverse.flatten_images
|
|
|
|
user_screenshots_path = File.join SCREENSHOTS_PATH, username
|
|
FileUtils.mkdir_p user_screenshots_path
|
|
|
|
REQUIRED_RESOLUTIONS.each do |res|
|
|
img.scale(*res.split('x').collect {|r| r.to_i}).write(File.join(user_screenshots_path, "#{filename}.#{res}.jpg")) {
|
|
self.quality = 90
|
|
}
|
|
end
|
|
end
|
|
end |