Containers for photos, with scroll, drag&drop between them
-
Hello folks,
I am not happy with the various solutions to manage my photos on the ipad. I would like to have a panel with
- a container with a thumbnail of my photos, in 1 d, scollable
- several containers in which i can d&d the photos I want to assemble
- for each of those a page in wich i can arrange the selected photos in the layout i want
- save the layout in camera roll when i am happy with it
- save all the containers data so i can rework my choices.
ideally all these is real time. This is to prepare my printed photoalbums before ordering them (the online tools are way too slow and cumbersome and unaccurate to do the preparation work on them - I usually use ‘Print To Size’ app for that).
I think pythonista is able to do that. But i am not (yet).Could you guys point out for me some existing code bricks you know about that I could re-use and assemble for this project?
I already heave found some excellent gesture repos, but not the scrollable photo container. I could do it myself but considering my poor python skills it is going to take me 2 or 3 weeks, so if i can use already available code, that’s good to spare the effort for the overall app. And i have noticed it is much easier for me to start from someone else good code and bend it to my will, rather than starting from scratch myself.Please help me!
Thanks
-
@cvp excellent! thanks.
It is nice to have the function in a really small piece of code.
I had to limit the number of photos because i have 1600 and that crashes my app. I’ll manage that.Another thing: for the interractions between panels i learned (from coding in Codea) that it is much easier to wire things together via a register/trigger message system. Do you have something available?
-
@jmv38 said:
it is much easier to wire things together via a register/trigger message system. Do you have something available?
No, never done like that. I always use normal way of ui. Good luck
-
last edited by
-
@cvp here an example of a very simple event class i found on google and modified for my needs. I also added an example of usage.
class EventHook(object): def __init__(self): self.__handlers = [] def __iadd__(self, handler): self.__handlers.append(handler) return self def __isub__(self, handler): self.__handlers.remove(handler) return self def __call__(self, *args, **keywargs): for handler in self.__handlers: handler(*args, **keywargs) def clearObjectHandlers(self, inObject): for theHandler in self.__handlers: if theHandler.im_self == inObject: self -= theHandler if __name__ == '__main__': class Watcher(): def __init__(self): self.incoming = EventHook() self.leaving = EventHook() class Greeter(): def __init__(self,me): self.me = me def sayHello(self, name): print('{}: hello Mister {}'.format(self.me,name)) def sayGoodbye(self, name): print('{}: goobye Mister {}'.format(self.me,name)) class Maid(): def __init__(self,me): self.me = me def sayHello(self, name): print('{}: hello Mister {}'.format(self.me,name)) def sayGoodbye(self, name): if name != 'DSK': print('{}: goobye Mister {}'.format(self.me,name)) else: print('{}: You f... s.. o. a b...!'.format(self.me)) from console import clear clear() Isee = Watcher() deskMan = Greeter('desk man Georges') maid = Maid('maid Sandra') # make the connections: Isee.incoming += lambda name: print('\nM. {} is comming...'.format(name)) Isee.incoming += deskMan.sayHello Isee.incoming += maid.sayHello Isee.leaving += lambda name: print('\nM. {} is leaving...'.format(name)) Isee.leaving += maid.sayGoodbye Isee.leaving += deskMan.sayGoodbye # remove listener from the event # fire event Isee.incoming('Clinton') Isee.leaving('Clinton')
-
@jmv38 Too complex for me 😀
-
@cvp i can understand what you feel: it is exactly what i thought the first time saw this! It took me several months to start to understand it, but once i did, bam!, it opened a huge box of possibilties because it made a complex project so much simpler. But I wont try to convert you, you’ll see for yourself as i use it in my project if you think it is usefull...
Thanks.
-
@cvp i am in the final polishing phase of my project.
I have pb with button icons: they render in color when i want a gray rendering (the one shown in the editor).
my code:img = ui.Image('iow:refresh_32').with_rendering_mode(ui.RENDERING_MODE_TEMPLATE) clear_button.image = img
any suggestion?
thanks.
-
@jmv38 did you try ui.RENDERING_MODE_ORIGINAL
-
@jmv38 this is ok, I think
img = ui.Image('iow:refresh_32')#.with_rendering_mode(ui.RENDERING_MODE_ORIGINAL) b.image = img b.tint_color = 'gray'
-
@cvp thanks.
but it still doesnt work: now the button shows in gray, not white, and is not visible on my gray background.
I wonder how to get it simply as it shows in the editor?
-
@cvp you know what? it works with ORIGINAL
looks like omz inverted TEMPLATE and ORIGINAL values
thanks.
-
@jmv38 said:
but it still doesnt work: now the button shows in gray, not white, and is not visible on my gray background.
I wonder how to get it simply as it shows in the editor?You asked gray and I didn't know you had a gray background
-
@cvp i have finished my first version of the program
here https://gist.github.com/1b67ba85ca7bd7b23c7058216895372c
this will:- let you choose an album xxxx
- load the 200 first pictures
- present them in a photopicker
- from which you can build photo album pages (collage)
- it creates 2 new albums:
- xxxx_pages : the album pages
- xxxx_pages_and_photos: as it says. useful to upload the album in photoweb printing service for instance
- your own photos and albums are not modified
to see how to use it tap ‘?’ button: it opens a youtube video that shows it in action.
It is designed to work in lanscape mode
let me know how it works for you.
-
@cvp hello again!
I am trying to make a high definition image with draw_snapshot()
I works fine until the context width is 4000, but i get a black image when the context width is 5000 or more. I need 9000....
Any suggestion?
Thanks.
-
@jmv38 Sorry, I forgot to tell you, 20 days ago, I had tried your Appli.py it I don't have any album in my photos, thus I tap the X in the first screen, and your program crashes in line
inputAlbum = allAlbums[inputTitle] 😢
-
@jmv38 this works for me
import ui iv = ui.ImageView() iv.image = ui.Image.named('P1020096.JPG') # 3888 x 2592 pixels wi,hi = iv.image.size iv.frame = (0,0,wi,hi) print(wi,hi) # 3888 2592 w = 2*wi h = 2*hi print(w,h) # 7776 5184 with ui.ImageContext(w,h) as ctx: iv.draw_snapshot() ui_image = ctx.get_image() with open('t1.jpg', 'wb') as f: f.write(ui_image.to_jpeg(0.9)) # 15552 x 10368
-
But 9000 x 6000 crashes..
-
@cvp thank for the info
i check again
-
@cvp i had forgotten that 4000 is really 8000 because x2
i think 8000 should be enough for prints 60 cm wide => thanks. you saved my last week of coding!However it is strange that 15000 is ok bu not 9000...?
Concerning the use of the project without any album, i could modify this for you if you are really interested in using this code. Are you?
thanks.
-
@jmv38 Not interested actually, thanks. If needed, I'll create an album.