lib/docsplit/image_extractor.rb in burisu-docsplit-0.7.8 vs lib/docsplit/image_extractor.rb in burisu-docsplit-0.7.9
- old
+ new
@@ -1,64 +1,61 @@
module Docsplit
-
# Delegates to GraphicsMagick in order to convert PDF documents into
# nicely sized images.
class ImageExtractor
-
- MEMORY_ARGS = "-limit memory 256MiB -limit map 512MiB"
+ MEMORY_ARGS = '-limit memory 256MiB -limit map 512MiB'.freeze
DEFAULT_FORMAT = :png
- DEFAULT_DENSITY = '150'
+ DEFAULT_DENSITY = '150'.freeze
# Extract a list of PDFs as rasterized page images, according to the
# configuration in options.
def extract(pdfs, options)
@pdfs = [pdfs].flatten
extract_options(options)
@pdfs.each do |pdf|
previous = nil
- @sizes.each_with_index do |size, i|
- @formats.each {|format| convert(pdf, size, format, previous) }
+ @sizes.each_with_index do |size, _i|
+ @formats.each { |format| convert(pdf, size, format, previous) }
previous = size if @rolling
end
end
end
# Convert a single PDF into page images at the specified size and format.
# If `--rolling`, and we have a previous image at a larger size to work with,
# we simply downsample that image, instead of re-rendering the entire PDF.
# Now we generate one page at a time, a counterintuitive opimization
# suggested by the GraphicsMagick list, that seems to work quite well.
- def convert(pdf, size, format, previous=nil)
+ def convert(pdf, size, format, previous = nil)
tempdir = Dir.mktmpdir
basename = File.basename(pdf, File.extname(pdf))
directory = directory_for(size)
pages = @pages || '1-' + Docsplit.extract_length(pdf).to_s
escaped_pdf = ESCAPE[pdf]
- FileUtils.mkdir_p(directory) unless File.exists?(directory)
- common = "#{MEMORY_ARGS} -density #{@density} #{resize_arg(size)} #{quality_arg(format)}"
+ FileUtils.mkdir_p(directory) unless File.exist?(directory)
+ common = "#{MEMORY_ARGS} -density #{@density} #{resize_arg(size)} #{quality_arg(format)}"
if previous
FileUtils.cp(Dir[directory_for(previous) + '/*'], directory)
result = `MAGICK_TMPDIR=#{tempdir} OMP_NUM_THREADS=2 gm mogrify #{common} -unsharp 0x0.5+0.75 \"#{directory}/*.#{format}\" 2>&1`.chomp
- raise ExtractionFailed, result if $? != 0
+ raise ExtractionFailed, result if $?.exitstatus.nonzero?
else
page_list(pages).each do |page|
- out_file = ESCAPE[File.join(directory, "#{basename}_#{page}.#{format}")]
+ out_file = ESCAPE[File.join(directory, "#{basename}_#{page}.#{format}")]
cmd = "MAGICK_TMPDIR=#{tempdir} OMP_NUM_THREADS=2 gm convert +adjoin -define pdf:use-cropbox=true #{common} #{escaped_pdf}[#{page - 1}] #{out_file} 2>&1".chomp
result = `#{cmd}`.chomp
- raise ExtractionFailed, result if $? != 0
+ raise ExtractionFailed, result if $?.exitstatus.nonzero?
end
end
ensure
- FileUtils.remove_entry_secure tempdir if File.exists?(tempdir)
+ FileUtils.remove_entry_secure tempdir if File.exist?(tempdir)
end
-
private
# Extract the relevant GraphicsMagick options from the options hash.
def extract_options(options)
- @output = options[:output] || '.'
+ @output = options[:output] || '.'
@pages = options[:pages]
@density = options[:density] || DEFAULT_DENSITY
@formats = [options[:format] || DEFAULT_FORMAT].flatten
@sizes = [options[:size]].flatten.compact
@sizes = [nil] if @sizes.empty?
@@ -78,26 +75,24 @@
end
# Generate the appropriate quality argument for the image format.
def quality_arg(format)
case format.to_s
- when /jpe?g/ then "-quality 85"
- when /png/ then "-quality 100"
- else ""
+ when /jpe?g/ then '-quality 85'
+ when /png/ then '-quality 100'
+ else ''
end
end
# Generate the expanded list of requested page numbers.
def page_list(pages)
- pages.split(',').map { |range|
+ pages.split(',').map do |range|
if range.include?('-')
range = range.split('-')
- Range.new(range.first.to_i, range.last.to_i).to_a.map {|n| n.to_i }
+ Range.new(range.first.to_i, range.last.to_i).to_a.map(&:to_i)
else
range.to_i
end
- }.flatten.uniq.sort
+ end.flatten.uniq.sort
end
-
end
-
end