omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Photos Module - Start Camera from Button

    Pythonista
    4
    26
    21200
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • cvp
      cvp last edited by cvp

      This code functions

      import ui
      import console
      import clipboard
      import photos
      
      class Extracter(ui.View):
      	def __init__(self):
      
      		# Some UI Elements 
      		#(...)
      
      		# Take Photo Button
      		self.take_photo = ui.Button(flex = 'LR', title = 'Take Photo')
      		self.take_photo.action = self.take_photo_action
      		# Some Button Styles
      		#(...)
      		self.add_subview(self.take_photo)
      
      	# Take Photo Action
      	@ui.in_background
      	def take_photo_action(self, sender):
      		image = photos.capture_image()
      		photos.save_image(image)
      
      if __name__=='__main__':
      	view = Extracter()
      	view.present('sheet')
      

      I also got some problems after several tests and I have had to cancel the app before retrying.
      Remove Pythonista app from tasks list (4/5 fingers up, slide app up) and restart Pythonista.

      1 Reply Last reply Reply Quote 0
      • simple
        simple last edited by simple

        On iPhone 6 Plus Pythonista stops responing, even with the subview added, which I intentionally had left out (I thought it would make the code here cleaner, but you are right to add it since it is needed). I've to remove it from the switch to reopen the application.

        Sometimes it stops after the press, sometimes the 'camera sheet' slides up but is all black and in the upper right corner is the 'Take Photo' button. After that it stops responing too.

        1 Reply Last reply Reply Quote 0
        • cvp
          cvp last edited by

          Strange, I don't have these problems on an IPad Mini 4.
          I take the photo, then click "use photo", then it's saved in Photos.
          Sorry, I can't help 🤕

          Phuket2 1 Reply Last reply Reply Quote 0
          • Phuket2
            Phuket2 @cvp last edited by

            @cvp , @simple , in Pythonista py3 at least photos.save_image(image) is deprecated.
            The below is in the help file.
            save_image(image) – Save a PIL image or ui.Image to the camera roll. Use create_image_asset() instead.

            I couldn't get it working. But I am sure it's just me

            1 Reply Last reply Reply Quote 0
            • cvp
              cvp last edited by

              Thanks for the info (just forgotten 🙄) but the problem does not come from the save action (I think but I'm never more sure of nothing) but from the capture action, unless a guru tells me the inverse!

              1 Reply Last reply Reply Quote 0
              • simple
                simple last edited by simple

                In the initial code sample I don't save the received image, and the application stops responding, so that shouldn't be the problem.

                The save_image(image) should still work since it is available for backwards compatibility, but was replaced for create_image_asset().

                But first I have to be able to take the image :)

                (Edit: I've tried the same script on an iPhone 6 and it crashes the application too. I've also checked that Pythonista has access to the camera.)

                1 Reply Last reply Reply Quote 0
                • cvp
                  cvp last edited by

                  Very strange.
                  Do you use Pythonista 3 with default Python 3? Just to be sure that you have the same environment as I've, because the script I posted is ok for me.

                  1 Reply Last reply Reply Quote 0
                  • Phuket2
                    Phuket2 last edited by

                    For me, I can take the image, it's the saving that fails. Does not crash, but generates errors when I click use photo. Just mention to give insight. I am on a iPad Pro 12 inch , latest iOS latest Pythonista beta 3

                    1 Reply Last reply Reply Quote 0
                    • simple
                      simple last edited by simple

                      I've Pythonista 3 installed with default interpreter 3.5 on latest iOS 9.3.3

                      @cvp When you launch the script, do you have to press the button to activate the camera? If I launch it, the camera activates first (I don't see the sheet with the button).

                      1 Reply Last reply Reply Quote 0
                      • cvp
                        cvp last edited by

                        I launch, I see the camera screen, I press the camera button, I hear a click, I press the "use photo" and the script saves the photo

                        1 Reply Last reply Reply Quote 0
                        • simple
                          simple last edited by

                          But that's not how the code should work, or did I understand that wrong (explained it wrong)?

                          It should first show the ui.view sheet with a button called 'Take Photo'. Then you press that button and the camera launches and then you take the photo.

                          cvp 1 Reply Last reply Reply Quote 0
                          • JonB
                            JonB last edited by

                            The posted code worked for me, but one thing you could try in cases like this is to add a ui.delay with a long enough delay to let the camera view fully dismiss.

                               # Take Photo Action
                                @ui.in_background
                                def take_photo_action(self, sender):
                                    image = photos.capture_image()
                                    def a():
                                       photos.save_image(image)
                                       self.close()
                                    ui.delay(a,.5)
                            
                            1 Reply Last reply Reply Quote 0
                            • cvp
                              cvp @simple last edited by

                              @simple sorry, I forgot to say that I see first the ui with the "take photo" button and of course I press it.

                              1 Reply Last reply Reply Quote 0
                              • cvp
                                cvp last edited by

                                To see the ui sheof t with your "take photo" button, you have first to present the view.

                                1 Reply Last reply Reply Quote 0
                                • simple
                                  simple last edited by simple

                                  If you first see the UI button the code works as it should.

                                  On my iPhones if I launch the script the camera opens immediately and I don't see the ui.view sheet.

                                  (Edit: I've been mistaken, I do see the ui.view sheet with the button.. I thought that the black ui.view was the camera and not the ui.view. Still, if I press the button the application crashes.)

                                  1 Reply Last reply Reply Quote 0
                                  • cvp
                                    cvp last edited by

                                    When you say crash, you mind terminate?
                                    If I go in the settings set that Pythonista can't use camera, I also have this abnormal end.
                                    If I reset on in the settings, I need to remove the app from active tasks to let the script function.

                                    1 Reply Last reply Reply Quote 0
                                    • simple
                                      simple last edited by simple

                                      Ok, I got it working.

                                      I've reduced the code to a minimum and checked what happens. With this, Pythonista freezes, I have to remove it from the iOS switch and restart the application.

                                      import ui
                                      import photos
                                      
                                      class Extracter(ui.View):
                                          def __init__(self):
                                              print('Executed')
                                              photos.capture_image()
                                              
                                      if __name__=='__main__':
                                          view = Extracter()
                                      

                                      After that I tried to put the photo.capture_image() out of the class, that worked before and still does but is not what I want.

                                      import ui
                                      import photos
                                      
                                      photos.capture_image()
                                      
                                      class Extracter(ui.View):
                                          def __init__(self):
                                              print('Executed')
                                              
                                      if __name__=='__main__':
                                          view = Extracter()
                                      

                                      Now after your post @cvp I've double checked that Pythonista has camera permissions. I've disabled it and run the first script, and the camera launched (!) but without a picture. I went back to settings and enabled it again, and now it works.

                                      I've tested that on the second iPhone. If you run the script it freezes as before, disable and enable camera permissions again, and it works.

                                      1 Reply Last reply Reply Quote 0
                                      • cvp
                                        cvp last edited by

                                        Eureka!!!

                                        1 Reply Last reply Reply Quote 0
                                        • simple
                                          simple last edited by

                                          I've now tested a few code snippets and there still seems to be a problem.

                                          The same script launched several times sometimes activates the camera and sometimes not. If I got back to the button activated camera it doesn't work no matter what I do.

                                          1 Reply Last reply Reply Quote 0
                                          • cvp
                                            cvp last edited by

                                            Sorry, I don't think I could help more.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Powered by NodeBB Forums | Contributors