Search code examples
imagepython-requestspython-3.7

Data looks like binary data , but returns as string. How to save as image?


I'm grabbing image data using the Request module. The data that comes back looks like interpreted binary data like so:

`����JFIF��>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ��C  $.' ",#(7),01444'9=82<.342��C

2!!

I have tried saving using:

image = open("test.jpg", "wb")
image.write(image_data)
image.close()

But that complains that it needs a bytes-like object. I have tried doing result.text.encode() with various formats like "utf-8" etc but the resulting image file cannot be opened. I have also tried doing bytes(result.text, "utf-8") and bytearray(result.text, "utf-8") and same problem. I think those are all roughly equivalent, anyway. Can someone help me convert this to a bytes-like object without destroying the data?

Also, my headers in the request is 'image/jpeg' but it still sends me the data as a string.

Thanks!


Solution

  • Use the content field instead of text:

    import requests
    r = requests.get('https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png')
    with open('test.png', 'wb') as file:
        file.write(r.content)
    

    See: https://requests.readthedocs.io/en/master/user/quickstart/#binary-response-content