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.


    Trouble using imported images from Photos

    Pythonista
    6
    31
    11188
    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.
    • JonB
      JonB last edited by

      did you try the stuff with listdir, and os.path.exists? (actually, should have checked for ui.Image.named(filename) is None -- Image fails silently when the file is not found, and just returns None.

      The error you are getting is the same one when a file does not exist, so we need to confirm the file does exist before going any further.

      So, check if Image.named returns an image, and do that outside of setup, as scene error handling is funky. Then print os.abspath('.') and print(os.listdir('.'))

      how did you get the file into pythonista?

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

        @JonB Hello, no, it is not a problem of "file not found" but file too big. I've tried with two files in the root, one of 5MB gives the problem, the other of 40KB does not have any problem

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

          That error can be both. So it is important to rule out path issues first.

          For large images, does named fail when outside of scene? If not, try creating the SpriteNode outside of the scene.

          Have you tried using jpg instead of png? Jpg uses MUCH less memory.

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

            @JonB My big image is a jpeg. It can be loaded in an ui.Image via named, even during the initial of the Scene but the error *OSError: could not load texture" occurs when set as SpriteNode

            import ui
            from scene import *
            
            class MyScene (Scene):
            	def setup(self):
            		self.background_color = '#000000'
            		ui_image = ui.Image.named('IMG_5903.JPG')	# 5 MB 3672x4896 px
            		self.background = SpriteNode(ui_image) # corrected 😢
            		self.background.position = self.size.width / 2, self.size.height / 2
            		self.add_child(self.background)
            
            run(MyScene())
            
            1 Reply Last reply Reply Quote 0
            • mikael
              mikael last edited by

              @cvp, @iOSBrett, is there a chance for you to share a problem picture to experiment on? Preferably also a smaller one.

              cvp 2 Replies Last reply Reply Quote 0
              • cvp
                cvp @mikael last edited by

                @mikael I'll try but don't forget I only do that to help, personally, I never use Scene nor SpriteNode

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

                  @mikael Is 5MB too big?

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

                    I have the same problem with photo which is an upload of a photo of 4 MB 1536x2048 px, but on Imgur: only 43 KB 640x853 px
                    Thus not too big, perhaps content problem

                    Edit: all examples of SpriteNode texture images I see on the net are "simple" images, not detailed images. I know I don't know anything about this matter, thus I only wanted to help but I obviously choosed an image not designed for textures. I'm sure I can't help, and I'm sorry to have be part in this topic, perhaps troubling the discussion.

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

                      @cvp, I had no trouble with your picture. Probably it got processed somehow by imgur.

                      Maybe if @iOSBrett would share his picture?

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

                        @mikael I have trouble with the same picture after download from Imgur...it takes 43 KB, is it the same for you?

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

                          Sorry for all, I'm not proud of me. My little script loads an ui.Image but I had let the image name in the SpriteNode line. I'll go back in my bed.

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

                            import ui
                            from scene import *
                            
                            class MyScene (Scene):
                            	def setup(self):
                            		self.background_color = '#000000'
                            		ui_image = ui.Image.named('IMG_5903.JPG')	# 5 MB 3672x4896 px   **** Error
                            		#ui_image = ui.Image.named('IMG_3735.JPG')	# 4 MB 1536x2048 px **** ok
                            		#ui_image = ui.Image.named('IMG_6575.JPG')	# 43 KB 640x853 px  **** ok
                            		self.background = SpriteNode(ui_image)
                            		self.background.position = self.size.width / 2, self.size.height / 2
                            		self.add_child(self.background)
                            
                            run(MyScene())
                            

                            No error with photo of 4 Mb but error with photo of 5 Mb

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

                              Big photo is here

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

                                what if you create the SpriteNode outside of the scene?

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

                                  @JonB idem

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

                                    ohh, ok. scene Textures are opengl based, i think. So you cannot have a Texture that is larger in pixels that the graphics memory region, which is something like twice largest screen size (for retina displays).

                                    with ui.ImageContext(1024*2,1024*2) as ctx:
                                       #ui.Image.named('IMG_0625.JPG').draw()
                                       Texture(ctx.get_image())
                                    

                                    The above works, on my Ipad3. Anything up to 2048 in either row/col works, but even 2049x1 fails. so, that tells me the opengl textures must be <=2048 in either dimension.

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

                                      @JonB that's ok, thanks for @iOSBrett

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

                                        I‘m having a somewhat similar issue, I can’t even load an image that’s 511 kB in size. I haven’t used the scene module for some time now and my memory is a bit rusty, but the following code should run without an issue, right?
                                        Here it is:

                                        from scene import *
                                        import os
                                        
                                        A = Action
                                        class MyScene (Scene):
                                        	def setup(self):
                                        		img = 'rectangle_1.png'
                                        		self.background_color = 'white'
                                        		if img in os.listdir(): print('yes') 	#prints 'yes' in console
                                        		print(ui.Image.named('IMG_5903.JPG')) #prints None in console
                                        		#a = Texture(img) #Image not found
                                        		a = SpriteNode(img) #could not load texture
                                        		self.add_child(a)
                                        		pass
                                        	
                                        if __name__ == '__main__':
                                        	run(MyScene(), show_fps=False)
                                        
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • pulbrich
                                          pulbrich last edited by pulbrich

                                          Wouldn’t you need an

                                          import ui
                                          

                                          before using ui.Image?

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

                                            Try

                                                img = 'rectangle_1.png'
                                                self.background_color = 'white'
                                                if img in os.listdir(): print('yes')            
                                                printt(ui.Image.named(img)) 
                                            

                                            You were checking one file, but trying to open a different one

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