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
    11189
    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.
    • iOSBrett
      iOSBrett last edited by

      Hi,

      I am currently teaching some young kids to code using Pythonista, our current project is Pac Man. As the kids are young I am having to take some shortcuts. For instance instead of building the background with tiles, I just want to load it from an image.

      So I have saved some images from the internet and am attempting to load them into my Scene as a SpriteNode. I can import them into Pythonista without any issue, however when I try to use them in the code I get strange errors. Sometime it is ‘could not load image’, but other times it gives errors on future lines, such as if you forget a semi colon.

      My image is in the same folder as the code, and I have tried lots of different images. One time one image worked, so I deleted it and tried again (need to ensure it works for kids) and it failed.

      I am on iOS11 with the latest version of Pythonista. Has anybody ne experienced this issue or have an ideas?

      ‘’’
      from scene import *
      import sound
      import random
      import math
      from joystick import Joystick
      from player import Player
      from tile import Tile
      from direction import Direction

      A = Action

      class MyScene (Scene):
      def setup(self):

      	self.background_color = '#000000'
      	
      	self.background = SpriteNode('IMG_0204.PNG')
      	self.background.position = self.size.width / 2, self.size.height / 2
      	self.add_child(self.background)
      

      ‘’’

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

        you might try loading the image outside the scene, using ui.Image.named. if that fails, catch the error, and print out os.listdir('.') to ensure the image and curpath are where you think they are.

        then, iirc, you can pass the ui.Image to SpriteNode.

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

          i added a try catch block, wasn’t sure how to catch the error though. But strangely even trying to list the current dir is not working. I’m not much of a python programmer, am a Swift coder, but I realise now that the strange errors are actually due to it throwing an exception in the init method. My errors happen in other methods due to the rest of the init method not being run.

          I did:

          ‘’’
          class MyScene (Scene):
          def setup(self):

          	self.background_color = '#000000'
          	#print(os.listdir('.'))
          	
          	try:
          		self.image = ui.Image('IMG_0204.PNG')
          	except:
          		print(os.listdir('.'))
          

          ‘’’

          I am now thinking it may be something to do with directory length. This project is anpbout 5 sub folders deep.

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

            @iOSBrett ui.Image.named('IMG_0204.PNG')

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

              Tried that too, same issue, thanks anyways.

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

                @iOSBrett

                except Exception as e:
                  print(str(e))```
                1 Reply Last reply Reply Quote 0
                • iOSBrett
                  iOSBrett last edited by iOSBrett

                  Thanks for that, exception is ‘could not load texture’

                  Had to remove ui.image.named as I couldn’t convert it to a texture for SpriteNode

                  Exception doesn’t really help us much, this is a weird one.

                  ‘’’
                  try:
                  self.background = SpriteNode('IMG_0202.PNG')
                  except Exception as e:
                  print(str(e))
                  ‘’’

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

                    @iOSBrett I have the same problem but only with big images, try with a litlle one, just to be sure. If ok, you will need to resize your photos

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

                      It definitely doesn’t work with big images, but I have same problem even with 200x300 images.

                      1 Reply Last reply Reply Quote 0
                      • 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
                                            • First post
                                              Last post
                                            Powered by NodeBB Forums | Contributors