andrepcg
andrepcg

Reputation: 1331

Why can I not read more than 16 bytes of a JPEG file in Python?

I am trying to read a JPG image in Python.

So far i have:

f = open("test.jpg")
ima = f.read(16)

print "'%s'"% (ima)

It reads 16 bytes and displays the string in console, but it looks like I cannot display more than 32 bytes. Why?

When it tries to read 32 or more bytes, the output will be the same as when it read 16 bytes. Why can I not read more than 16 bytes of the jpeg image?

Upvotes: 5

Views: 21584

Answers (2)

yurymik
yurymik

Reputation: 2224

Two issues here:

  1. Set read mode to binary. This way file.read function won't try to convert '\r\n' sequences.

  2. You're trying to print NULL-terminated string to the console. print function finds first zero character in your string and terminates. Use binascii.hexlify to convert it to the hex:


f = open("test.jpg", "rb")
ima = f.read(16)

print "%s" % (binascii.hexlify(ima))

Upvotes: 11

brettkelly
brettkelly

Reputation: 28205

You probably need to set the open mode to binary:

f = open("test.jpg", "rb") # 'rb' here means "read mode, binary"

See this similar question for a more thorough description.

Upvotes: 5

Related Questions