简体   繁体   中英

How can I input the image as byte data instead of string?

I'm new to python and was playing around with how to change my Instagram profile picture. The part I just can't get past is how I can put my image into the program. This is my code:

from instagram_private_api import Client, ClientCompatPatch

user_name = 'my_username'
password = 'my_password'
api = Client(user_name, password)

api.change_profile_picture('image.png')

Now, from what I read on the API Documentation, I can't just put in an image. It needs to be byte data. On the API documentation , the parameter is described like this:

photo_data – byte string of image

I converted the image on an encoding website and now I have the file image.txt with the byte data of the image. So I changed the last line to this:

api.change_profile_picture('image.txt')

But this still doesn't work. The program doesn't read it as byte data. I get the following error:

Exception has occurred: TypeError
a bytes-like object is required, not 'str'

What is the right way to put in the picture?

The error is telling you that "input.txt" (or "image.png" ) is a string, and it's always going to say that as long as you pass in a filename because filenames are always strings. Doesn't matter what's in the file, because the API doesn't read the file.

It doesn't want the filename of the image, it wants the actual image data that's in that file. That's why the parameter is named photo_data and not photo_filename . So read it (in binary mode, so you get bytes rather than text) and pass that instead.

with open("image.png", "rb") as imgfile:
    api.change_profile_picture(imgfile.read())

The with statement ensures that the file is closed after you're done with it.

if you have .png or .jpeg or ... then use this.

with open("image.png", "rb") as f:
    api.change_profile_picture(f.read())

and if you have a .txt file then use this.

with open("image.txt", "rb") as f:
    api.change_profile_picture(f.read())

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM