image processing and start of print handling
This commit is contained in:
parent
247c12ad8e
commit
f36a14d9c1
4
Makefile
4
Makefile
@ -1,7 +1,7 @@
|
|||||||
.PHONY : test test-coverage
|
.PHONY : test test-coverage
|
||||||
|
|
||||||
test :
|
test :
|
||||||
testrb -b tests/*.rb
|
testrb `find tests -name '*.rb'`
|
||||||
|
|
||||||
test-coverage :
|
test-coverage :
|
||||||
rcov -x '\/jruby\/lib\/' -x '\/tests\/data\/' tests/*.rb
|
rcov -x '\/jruby\/lib\/' -x '\/tests\/data\/' `find tests -name '*.rb'`
|
@ -45,13 +45,6 @@ class Filter
|
|||||||
recalc_pixels
|
recalc_pixels
|
||||||
end
|
end
|
||||||
|
|
||||||
def convert(command, verbose = false)
|
|
||||||
if verbose
|
|
||||||
puts "convert " + (verbose ? "-verbose " : "" ) + [ command ].flatten.join(" ")
|
|
||||||
end
|
|
||||||
system("convert " + (verbose ? "-verbose " : "" ) + [ command ].flatten.join(" "))
|
|
||||||
end
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Get the dimensions of a file
|
# Get the dimensions of a file
|
||||||
#
|
#
|
||||||
|
@ -7,21 +7,6 @@ Dir[File.dirname(__FILE__) + "/classes/*.rb"].each do |file|
|
|||||||
require file
|
require file
|
||||||
end
|
end
|
||||||
|
|
||||||
class OutputFilter < Filter
|
|
||||||
#
|
|
||||||
# get the output filename for this filter
|
|
||||||
#
|
|
||||||
def filename(info)
|
|
||||||
target = @config['target']
|
|
||||||
info.each { |k,v| target = target.gsub("{#{k}}", v.to_s) }
|
|
||||||
target
|
|
||||||
end
|
|
||||||
|
|
||||||
#
|
|
||||||
# get the output targets for this filter
|
|
||||||
#
|
|
||||||
def targets(info); filename(info); end
|
|
||||||
end
|
|
||||||
|
|
||||||
module PrintHandling
|
module PrintHandling
|
||||||
#
|
#
|
||||||
|
@ -32,6 +32,10 @@ module ImageProcessing
|
|||||||
|
|
||||||
call_system("inkscape -e \"#{inkscape_target}\" -y 1.0 #{params.join(" ")} \"#{input}\"")
|
call_system("inkscape -e \"#{inkscape_target}\" -y 1.0 #{params.join(" ")} \"#{input}\"")
|
||||||
|
|
||||||
|
handle_inkscape_rotation(inkscape_target, target)
|
||||||
|
end
|
||||||
|
|
||||||
|
def handle_inkscape_rotation(inkscape_target, target)
|
||||||
if @config['rotate']
|
if @config['rotate']
|
||||||
command = [
|
command = [
|
||||||
"\"#{inkscape_target}\"",
|
"\"#{inkscape_target}\"",
|
||||||
|
70
modules/PrintHandling.rb
Normal file
70
modules/PrintHandling.rb
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
module PrintHandling
|
||||||
|
#
|
||||||
|
# calculate the page size in PPI
|
||||||
|
#
|
||||||
|
def calculate_page_size
|
||||||
|
ok = false
|
||||||
|
|
||||||
|
if @config['dpi']
|
||||||
|
if @config['page_size']
|
||||||
|
case @config['page_size'].downcase
|
||||||
|
when "letter", "letter_portrait"
|
||||||
|
page_width = 8.5; page_height = 11; ok = true
|
||||||
|
when "letter_landscape"
|
||||||
|
page_width = 11; page_height = 8.5; ok = true
|
||||||
|
when "half_letter_landscape"
|
||||||
|
page_width = 5.5; page_height = 8.5; ok = true
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if @config['page_width_inches'] && @config['page_height_inches']
|
||||||
|
page_width = @config['page_width_inches']
|
||||||
|
page_height = @config['page_height_inches']
|
||||||
|
ok = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if ok
|
||||||
|
page_width *= @config['dpi'].to_i
|
||||||
|
page_height *= @config['dpi'].to_i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if !ok
|
||||||
|
page_width = @config['page_width']
|
||||||
|
page_height = @config['page_height']
|
||||||
|
end
|
||||||
|
|
||||||
|
[ page_width, page_height ]
|
||||||
|
end
|
||||||
|
|
||||||
|
#
|
||||||
|
# align the provided image on a white page
|
||||||
|
#
|
||||||
|
def build_for_print(input, output, side = "none")
|
||||||
|
page_width, page_height = calculate_page_size
|
||||||
|
command = [
|
||||||
|
"-density #{config['dpi']}",
|
||||||
|
"-size #{page_width.to_i}x#{page_height.to_i}",
|
||||||
|
"xc:white"
|
||||||
|
]
|
||||||
|
|
||||||
|
case side
|
||||||
|
when "none"
|
||||||
|
command << "-gravity Center"
|
||||||
|
when "left"
|
||||||
|
command << "-gravity East"
|
||||||
|
when "right"
|
||||||
|
command << "-gravity West"
|
||||||
|
end
|
||||||
|
|
||||||
|
command << "-draw 'image Over 0,0 0,0 \"#{input}\"'"
|
||||||
|
|
||||||
|
if output[0,1] == "|"
|
||||||
|
command << output[1..-1]
|
||||||
|
else
|
||||||
|
command << "\"#{output}\""
|
||||||
|
end
|
||||||
|
|
||||||
|
convert(command)
|
||||||
|
end
|
||||||
|
end
|
@ -1,4 +1,7 @@
|
|||||||
require "test/unit"
|
require 'rubygems'
|
||||||
|
require 'test/unit'
|
||||||
|
require 'mocha'
|
||||||
|
require 'fakefs/safe'
|
||||||
require File.dirname(__FILE__) + '/../modules/ImageProcessing.rb'
|
require File.dirname(__FILE__) + '/../modules/ImageProcessing.rb'
|
||||||
|
|
||||||
class TestImageProcessing < Test::Unit::TestCase
|
class TestImageProcessing < Test::Unit::TestCase
|
||||||
@ -29,4 +32,31 @@ class TestImageProcessing < Test::Unit::TestCase
|
|||||||
assert_equal inkscape_target, expected_target
|
assert_equal inkscape_target, expected_target
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_handle_inkscape_rotation
|
||||||
|
@instance.config = { 'rotate' => 90 }
|
||||||
|
@instance.expects(:convert).with(['"target-pre.png"', '-rotate 90', '"target"'])
|
||||||
|
|
||||||
|
FakeFS do
|
||||||
|
FileUtils.touch('target-pre.png')
|
||||||
|
@instance.handle_inkscape_rotation('target-pre.png', 'target')
|
||||||
|
|
||||||
|
assert !(File.exists? 'target-pre.png')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_convert
|
||||||
|
[ false, true ].each do |verbose|
|
||||||
|
@instance.expects(:call_system).with('convert ' + (verbose ? '-verbose ' : '') + 'test')
|
||||||
|
@instance.convert(['test'], verbose)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_inkscape
|
||||||
|
@instance.expects(:call_system).with('inkscape -e "new-target" -y 1.0 -w 200 "input"')
|
||||||
|
@instance.expects(:handle_inkscape_rotation).with('new-target', 'target')
|
||||||
|
@instance.expects(:setup_inkscape).returns([['-w 200'], 'new-target'])
|
||||||
|
|
||||||
|
@instance.inkscape('input', 'target')
|
||||||
|
end
|
||||||
end
|
end
|
29
tests/TestPrintHandling.rb
Normal file
29
tests/TestPrintHandling.rb
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
require 'rubygems'
|
||||||
|
require 'test/unit'
|
||||||
|
require 'mocha'
|
||||||
|
require 'fakefs/safe'
|
||||||
|
require File.dirname(__FILE__) + '/../modules/PrintHandling.rb'
|
||||||
|
|
||||||
|
class TestPrintHandling < Test::Unit::TestCase
|
||||||
|
def setup
|
||||||
|
@instance = Class.new do
|
||||||
|
include PrintHandling
|
||||||
|
|
||||||
|
attr_accessor :config
|
||||||
|
end.new
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_calculate_page_size
|
||||||
|
[
|
||||||
|
[ { 'page_width' => 10, 'page_height' => 20 }, [ 10, 20 ] ],
|
||||||
|
[ { 'dpi' => 100 , 'page_width' => 10, 'page_height' => 20 }, [ 10, 20 ] ],
|
||||||
|
[ { 'dpi' => 100 , 'page_width_inches' => 1, 'page_height_inches' => 2 }, [ 100, 200 ] ],
|
||||||
|
[ { 'dpi' => 1 , 'page_size' => 'letter' }, [ 8.5, 11 ] ],
|
||||||
|
[ { 'dpi' => 1 , 'page_size' => 'letter_landscape' }, [ 11, 8.5 ] ],
|
||||||
|
[ { 'dpi' => 1 , 'page_size' => 'half_letter_landscape' }, [ 5.5, 8.5 ] ],
|
||||||
|
].each do |config, expected_return|
|
||||||
|
@instance.config = config
|
||||||
|
assert_equal expected_return, @instance.calculate_page_size
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user