diff options
-rw-r--r-- | test/lua/combine9.lua | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/test/lua/combine9.lua b/test/lua/combine9.lua new file mode 100644 index 0000000..0bc1b17 --- /dev/null +++ b/test/lua/combine9.lua @@ -0,0 +1,107 @@ +--A script to compose 9 photos, with 4/6 aspect ratio + +require"imlua" +require"imlua_process" +require"iuplua" + +function Confirm(title,msg) + if continue then + b=iup.Alarm(title, msg ,"Continue" ,"Exit") + if b==2 then continue=false print("Script Aborted!") end + end +end + +function Create_Host_Image() + if continue then + local screenx=1024*3 screeny=684*3 + dst_photo = im.ImageCreate(screenx, screeny, im.RGB, im.BYTE) + resize_photo = im.ImageCreate(1024, 684, im.RGB, im.BYTE) -- for resize + end +end + +function Create_Host_Name(name) + if continue then + i=0 + repeat + i=i+1 + num=1000+i + numstr=string.sub(tostring(num),-3) +-- path="D:/Composite/" + path="D:/Downloads/Test/" + ext=".jpg" + Result=path..name..numstr..ext + res,msg=io.open(Result) + io.close() + until not res + end +end + +function Get_Source_Photo() + if continue then +-- path="D:/MyPictures/" + path="D:/Downloads/Test/*.jpg" + Source, err = iup.GetFile(path) + print("Source: ", Source) + if err<0 then continue=false end + end +end + +function Insert_Photo(num) + if continue then + title="Photo "..num.." of 9" msg=Source Confirm(title,msg) + wd=dst_photo:Width() + hd=dst_photo:Height() + --print("Dst Size:",wd,hd) + src_photo=im.FileImageLoadBitmap(Source) + valuex=src_photo:Width() + valuey=src_photo:Height() + --print("Source Size:",valuex,valuey) + panex={0,1024,2048,0,1024,2048,0,1024,2048} + paney={0,0,0,684,684,684,1368,1368,1368} + Xd=panex[num] + Yd=paney[num] + Wd=1024 Hd=684 + -- extract a proportional rectangle from the source image + if 1.5*valuey>valuex then + Ws=valuex + Xs=0 + Hs=math.floor(valuex/1.5) + Ys=math.floor((valuey-Hs)/2) + else + Hs=valuey + Ys=0 + Ws=math.floor(1.5*Hs) + Xs=math.floor((valuex-Ws)/2) + end + + --print("Crop Size:",Ws, Hs) + --print("Crop Shift:",Xs,Ys) + crop_photo = im.ImageCreate(Ws, Hs, im.RGB, im.BYTE) + im.ProcessCrop(src_photo, crop_photo, Xs,Ys) + im.ProcessResize(crop_photo, resize_photo, 1) -- do bilinear interpolation + im.ProcessInsert(dst_photo, resize_photo, dst_photo, Xd, Yd) -- insert resize in dst and place the result in dst + crop_photo:Destroy() + + if num==9 then src_photo:CopyAttributes(dst_photo) end + end +end + +function Save_Composite_Photo() + if continue then + name="Composite" + Create_Host_Name(name) + dst_photo:Save(Result, "JPEG") + os.execute(Result) + end +end + +--Script Starts +continue=true +title="9 Panel Composite" msg="Photos can be anysize." Confirm(title,msg) +Create_Host_Image() +for i=1,9 do + num=i + Get_Source_Photo() + Insert_Photo(num) + end +Save_Composite_Photo() |