From 1156b837ecba6c70557454017ab8eb70d3974bef Mon Sep 17 00:00:00 2001 From: Matthias Kramm Date: Thu, 4 Feb 2010 21:38:08 -0800 Subject: [PATCH] added transparency spec --- spec/spec_helper.rb | 12 +++---- spec/transparency.pdf | Bin 0 -> 3718 bytes spec/transparency.py | 82 +++++++++++++++++++++++++++++++++++++++++++++ spec/transparency.spec.rb | 27 +++++++++++++++ 4 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 spec/transparency.pdf create mode 100644 spec/transparency.py create mode 100644 spec/transparency.spec.rb diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 86e098b..44c1424 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -67,7 +67,7 @@ end def rgb_to_int(rgb) # ImageMagick rgb triples are 16 bit - (rgb.reverse+"\0").unpack("i")[0] + (rgb.reverse+[0]).map {|c| c>>8}.pack("CCCC").unpack("i")[0] end class Pixel @@ -80,13 +80,13 @@ class Pixel color1 == color2 or raise WrongColor.new(self) end def should_be_brighter_than(pixel) - gray1 = @rgb.inject(0) {|sum,e| sum+e[0]} - gray2 = pixel.rgb.inject(0) {|sum,e| sum+e[0]} + gray1 = @rgb.inject(0) {|sum,e| sum+e} + gray2 = pixel.rgb.inject(0) {|sum,e| sum+e} gray1 > gray2 or raise PixelError.new(self,"is not brighter than",pixel) end def should_be_darker_than(pixel) - gray1 = @rgb.inject(0) {|sum,e| sum+e[0]} - gray2 = pixel.rgb.inject(0) {|sum,e| sum+e[0]} + gray1 = @rgb.inject(0) {|sum,e| sum+e} + gray2 = pixel.rgb.inject(0) {|sum,e| sum+e} gray1 < gray2 or raise PixelError.new(self,"is not less bright than",pixel) end def should_be_the_same_as(pixel) @@ -162,7 +162,7 @@ class DocFile end def pixel_at(x,y) self.render() - data = @img.export_pixels_to_str(x, y, 1, 1, "RGB") + data = @img.export_pixels(x, y, 1, 1, "RGB") return Pixel.new(x,y,data) end end diff --git a/spec/transparency.pdf b/spec/transparency.pdf new file mode 100644 index 0000000000000000000000000000000000000000..88378deb754deed77a5dc3768f79fb8ce2f6d05b GIT binary patch literal 3718 zcmcguU5pb|6z-~kj-VS~1bn$0*|12qbMKwM){u3#?e1FTr?eYHx2v6P@3w>8nPz5| z?CO&y@}x1KC3_{_~;vP6XcEfgha%1=dVB0xC9cKG@UuU=bm%E z`+eu!;X-a|lq6MQcuv+7U?~dXl+kpVElxFcm*rU1sxe_~OmJMA>5IbhS*d^%S1!8A!IQtR`NT!% zvi$h<)=*>c^iS-Y#QWo0_79bBn;V5=8-=0qgXqRpcH}~(R{3`D#Fej)pZfIdi7!4o zcl`9pFF!f+`CEm)0zFwzgb*Bys79%qY(_2pnY1 zbL80*g2O_zb|Iyud3UA7{CWlPHKPV)NrLz?GwKbOKV=NpDKI;0Ew(I^nJ!8RV%BO} zcB!RTnV4fojVhbA^_9Lj!2cYNf^IK5fLp<4HKXcUHX;h&WoglLkOW|bh^9P5JJGAw zZmnLvdH&i zf1s}QVJz*_owpH39td+!m=>oq_YbLmMBUgD>P7Dcw^FIxTD^IG;HiJJD|feT-I^%< zx#6Ea<#S&TVkN3y3QTQ15ZSM99YO3~qf#L;fmow*p|bhMpD&efpF1Wb|1Q5*POzsp zPWK7VH|F6bISSt)$G-3rHKH-ON5~(D#zgJlG4WeNH`asW8xor?CjRPEU!+nR)z_iY zkixz??wi7)OxhIgkjXt@=yRBG;2#EwiQ13F)Yox0vbR>ppGhP{X`qjCJqOMm5^;xi zNH@Ti`r=p*Tc9q%z}@Fdg9B?juG=@>-M;(#HD`l;^m|~d{qDk^7PVK~a=Pm)p zf>m3pG8>J+ByJk>NK4|R+#;wvQdn^tmWgOm5%(JA(sFs%E}lvdtfK|Z@G-`V6{2p; zOK@^r1iU-Q_LWN8H{lhny zpyq_>7~#7h=8S~}W;3(OoLMX;P0OvZ1tI=GXeu%i>Hk(n%O3E7$TZr4$V&A55FUuq zF18)c;Wr8as3A61S`B6ja~((R9T8VbcmVuJ+eZjT+SKbX@Tee8I8}a8(Fnh)=&j%` zw z9zrPybT|m3P^mNPUWP^z62z*GaFQw=t3&07B^KaH3hK~-J}wFxR2IsHR|nBx*cO>% zE!jXXJFn0pZ zvvK(4ZwayiUA=15oLS^$G1rzP?U*T^P_jBeX4QEe;2)IHUcYRE9H2R20Y@LCDvG3_ z1r*tMKjI%`hBlf~0oxuMbeEV-w9h()cl4fhN*pVqree5I zRf}OtwD=hjEnXW*rQ`d_eQX5B>ZNHuCc~UvTQ{1_=8dCdyu&!v#G++^qWsAw=FJ5Q zd2@>ozufE|tl@Mvm6ay4N(xIVRy8dplMJC5EvMqi)Y$qfJRv!*Zo3}AXx GQ^J3FlP*>O literal 0 HcmV?d00001 diff --git a/spec/transparency.py b/spec/transparency.py new file mode 100644 index 0000000..4bdb4f8 --- /dev/null +++ b/spec/transparency.py @@ -0,0 +1,82 @@ +import sys +from pdflib_py import * +from math import sin,cos +import Image +import ImageDraw + +img = Image.new("L", (3, 3)) +draw = ImageDraw.Draw(img) +draw.point((0,1), fill=255) +draw.point((0,2), fill=255) +draw.point((1,0), fill=255) +draw.point((1,2), fill=255) +draw.point((2,0), fill=255) +draw.point((2,1), fill=255) +img.save("/tmp/mask1.png") + +img = Image.new("L", (16, 1)) +draw = ImageDraw.Draw(img) +for i in range(16): + draw.point((i,0), fill=i*16) +img.save("/tmp/mask2.png") + +img = Image.new("RGB", (3, 3)) +draw = ImageDraw.Draw(img) +draw.point((0,1), fill=(0,0,0)) +draw.point((0,2), fill=(255,0,0)) +draw.point((1,0), fill=(0,255,0)) +draw.point((1,2), fill=(0,0,255)) +draw.point((2,0), fill=(255,255,0)) +draw.point((2,1), fill=(0,255,255)) +img.save("/tmp/img1.png") + +img = Image.new("RGB", (16, 1)) +draw = ImageDraw.Draw(img) +for i in range(16): + draw.point((i,0), fill=(0,255,0)) +img.save("/tmp/img2.png") + +p = PDF_new() +PDF_open_file(p, "transparency.pdf") +font = PDF_load_font(p, "Helvetica", "host", "") + +PDF_set_parameter(p, "usercoordinates", "true") + +width = 400 +height = 400 +PDF_begin_page(p, width, height) + +PDF_setcolor(p, "fill", "rgb", 0.0,0.0,0.0,1.0) +PDF_moveto(p, 0,0) +PDF_lineto(p, width, 0) +PDF_lineto(p, width, height) +PDF_lineto(p, 0, height) +PDF_lineto(p, 0, 0) +PDF_fill(p) + +PDF_setfont(p, font, 10.0) +PDF_setcolor(p, "fill", "rgb", 1.0,1.0,1.0,1.0) +PDF_set_text_pos(p, 50, 205);PDF_show(p, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz") +PDF_set_text_pos(p, 50, 105);PDF_show(p, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz") + +mask = PDF_load_image(p, "png", "/tmp/mask1.png", "mask") +i = PDF_load_image(p, "png", "/tmp/img1.png", "masked "+str(mask)) +PDF_place_image(p, i, 100, 300, 20) + +mask2 = PDF_load_image(p, "png", "/tmp/mask2.png", "mask") +i2 = PDF_load_image(p, "png", "/tmp/img2.png", "masked "+str(mask2)) +PDF_place_image(p, i2, 0, 200, 25) + +PDF_setcolor(p, "fill", "rgb", 1.0,1.0,1.0,1.0) +gstate = PDF_create_gstate(p, "opacityfill 0.25") # blendmode multiply opacityfill 0.5") +PDF_set_gstate(p, gstate) +PDF_moveto(p, 50, 75) +PDF_lineto(p, 50+300, 75) +PDF_lineto(p, 50+300, 150) +PDF_lineto(p, 50, 150) +PDF_lineto(p, 50, 75) +PDF_fill(p) + +PDF_end_page(p) +PDF_close(p) +PDF_delete(p); diff --git a/spec/transparency.spec.rb b/spec/transparency.spec.rb new file mode 100644 index 0000000..f15be8f --- /dev/null +++ b/spec/transparency.spec.rb @@ -0,0 +1,27 @@ +require File.dirname(__FILE__) + '/spec_helper' + +describe "pdf conversion" do + convert_file "transparency.pdf" do + pixel_at(174,135).should_be_of_color 0xff0000 + pixel_at(167,112).should_be_of_color 0x000000 + pixel_at(172,75).should_be_of_color 0x000000 + pixel_at(199,108).should_be_of_color 0x000000 + pixel_at(234,141).should_be_of_color 0x000000 + pixel_at(202,142).should_be_of_color 0x0000ff + pixel_at(233,111).should_be_of_color 0x00ffff + pixel_at(233,71).should_be_of_color 0xffff00 + pixel_at(199,71).should_be_of_color 0x00ff00 + pixel_at(594,277).should_be_brighter_than pixel_at(439,279) + pixel_at(552,284).should_be_brighter_than pixel_at(361,285) + pixel_at(474,294).should_be_brighter_than pixel_at(325,277) + pixel_at(283,276).should_be_brighter_than pixel_at(94,277) + area_at(86,290,107,301).should_not_be_plain_colored + area_at(158,287,186,300).should_not_be_plain_colored + area_at(234,288,262,300).should_not_be_plain_colored + area_at(312,287,337,300).should_not_be_plain_colored + area_at(162,438,244,455).should_not_be_plain_colored + pixel_at(201,400).should_be_brighter_than pixel_at(174,345) + pixel_at(299,477).should_be_brighter_than pixel_at(237,555) + area_at(407,400,435,422).should_be_plain_colored + end +end -- 1.7.10.4