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 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.
-
@jmv38 During my tests and my multiple crashes, I'm pretty sure I have seen a red message during one microsecond, containing the words Decompression Bombs
This is a [PIL message](Decompression Bombs) .
I didn't use PIL. Perhaps the ui.Image.save uses it...Something like, it not sure, message disappeared immediately
/usr/lib64/python2.6/site-packages/PIL/Image.py:2261: DecompressionBombWarning: Image size (166109750 pixels) exceeds limit of 89478485 pixels, could be decompression bomb DOS attack. DecompressionBombWarning)
-
@jmv38 said:
However it is strange that 15000 is ok bu not 9000...?
15000 is in pixel, already multiplied by 2. The width was 7776, just < 9000
-
Same crash with
Image.warnings.simplefilter('error', Image.DecompressionBombWarning) Image.MAX_IMAGE_PIXELS = 100000000000
-
@cvp 5000 doesnt work for me and 5000<7000
-
@jmv38 and Sure that you don't have two pixels py point?
What is your device?
-
@cvp i do have 2 pixels per point (ipad air)
i dont crash, it is just that the image saved is black
i checked that 4x1024 is ok and 4x1025 fails
i remember this ios limit 4096 from somwhere.
-
@jmv38 could you post your code, only this part, and the image you use?
-
@cvp just to let you know here is my code.
It wont run because the rest of the code is missing, but it gives you the ideadef save(self): # make a hi resolution copy of back & images, then save it in camera roll xo, yo, w, h = self.page.back.frame c = self.page.back.background_color targetWidth = 4*1024 s = targetWidth / w w, h = w*s, h*s page = ui.View( frame=(0,0,w,h), background_color=c) views = [] for thumb in self.thumbs: x,y,w,h = thumb.frame x,y,w,h = (x-xo)*s, (y-yo)*s, w*s, h*s v = ui.View( frame=(x,y,w,h) ) x,y,w,h = thumb.iv.frame x,y,w,h = x*s, y*s, w*s, h*s img = thumb.getImage(thumb.asset) iv = ui.ImageView(frame=(x,y,w,h), image=img) v.add_subview(iv) page.add_subview(v) views.append(v) # save page image in pythonista getTopView().add_subview(page) #page.bring_to_front() #if True: return path = 'temp.jpg' with ui.ImageContext(page.width, page.height) as ctx: page.draw_snapshot() ui_image = ctx.get_image() pil = Image.open(io.BytesIO(ui_image.to_png())) pil.save(path , quality=99) # save page image in albums asset = photos.create_image_asset(path) os.remove(path) getTopView().remove_subview(page) views = False console.hud_alert('saved')
looks like i must add the view to the screen to get the draw snapshot to work.
-
@jmv38 said:
looks like i must add the view to the screen to get the draw snapshot to work.
Not at all, I think. You've seen my little code, nothing goes to the screen