Here is a Ruby program to convert between twips and pixels:
#!/bin/ruby
# As per PostScript definition
TWIPS_PER_INCH = 1440
def twips_to_pixels(twips, dpi, round = true)
raise "Invalid DPI" if (dpi <= 0)
raise "Invalid twips" if (twips < 0)
num_pixels = ((twips / TWIPS_PER_INCH.to_f) * dpi)
return round ? num_pixels.round : num_pixels.floor
end
def pixels_to_twips(pixels, dpi, round = true)
raise "Invalid DPI" if (dpi <= 0)
raise "Invalid number of pixels" if (pixels < 0)
twips = ((pixels / dpi.to_f) * TWIPS_PER_INCH)
return round ? twips.round : twips.floor
end
def numeric?(str)
Float(str) != nil rescue false
end
def print_usage_and_exit
puts "Usage: #{$0} [-t twips | -p pixels] [-d dpi]"
exit(1)
end
if __FILE__ == $0
print_usage_and_exit if ARGV.length != 4
dpi = nil
twips = nil
pixels = nil
[0, 2].each do |option_index|
option = ARGV[option_index]
option_val = ARGV[option_index + 1]
print_usage_and_exit unless (numeric?(option_val))
case option
when "-d" then dpi = option_val.to_f
when "-t" then twips = option_val.to_f
when "-p" then pixels = option_val.to_f
else print_usage_and_exit
end
end
print_usage_and_exit if ((pixels.nil? && twips.nil?) || dpi.nil?)
res = twips.nil? ? pixels_to_twips(pixels, dpi) : twips_to_pixels(twips, dpi)
puts res
end
# As per PostScript definition
TWIPS_PER_INCH = 1440
def twips_to_pixels(twips, dpi, round = true)
raise "Invalid DPI" if (dpi <= 0)
raise "Invalid twips" if (twips < 0)
num_pixels = ((twips / TWIPS_PER_INCH.to_f) * dpi)
return round ? num_pixels.round : num_pixels.floor
end
def pixels_to_twips(pixels, dpi, round = true)
raise "Invalid DPI" if (dpi <= 0)
raise "Invalid number of pixels" if (pixels < 0)
twips = ((pixels / dpi.to_f) * TWIPS_PER_INCH)
return round ? twips.round : twips.floor
end
def numeric?(str)
Float(str) != nil rescue false
end
def print_usage_and_exit
puts "Usage: #{$0} [-t twips | -p pixels] [-d dpi]"
exit(1)
end
if __FILE__ == $0
print_usage_and_exit if ARGV.length != 4
dpi = nil
twips = nil
pixels = nil
[0, 2].each do |option_index|
option = ARGV[option_index]
option_val = ARGV[option_index + 1]
print_usage_and_exit unless (numeric?(option_val))
case option
when "-d" then dpi = option_val.to_f
when "-t" then twips = option_val.to_f
when "-p" then pixels = option_val.to_f
else print_usage_and_exit
end
end
print_usage_and_exit if ((pixels.nil? && twips.nil?) || dpi.nil?)
res = twips.nil? ? pixels_to_twips(pixels, dpi) : twips_to_pixels(twips, dpi)
puts res
end
No comments:
Post a Comment