PIL problem

B

bfrederi

I am having a problem using PIL. I am trying to crop and image to a
square, starting from the center of the image, but when I try to crop
the image, it won't crop. Here are the relevant code snippets:

### Function I am testing ###
def create_square_image(file_name):
""" Creates a thumbnail sized image and turns it into a square """
image = Image.open(open(file_name))

size_tuple = image.size
width = size_tuple[0]
height = size_tuple[1]

square_length = 75

x1 = (width / 2) - (square_length / 2)
x2 = x1 + square_length
y1 = (height / 2) - (square_length / 2)
y2 = y1 + square_length

image.crop((x1,y1,x2,y2))
image.save(file_name, "JPEG")


### In my tests.py ###
def testCreateSquareImage(self):
""" Test to turn image into a square """
self.convert_file = '/home/bfrederi/square-dissertation.jpg'
tkl_converter.create_square_image(self.convert_file)
image = Image.open(self.convert_file)
if image.size[0] == 75 and image.size[1] == 75:
self.assert_(True)
else:
self.fail("Width: %s Height: %s" % (image.size[0],
image.size[1]))

### Test result ###
FAIL: Test to turn image into a square
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests.py", line 462, in testCreateSquareImage
self.fail("Width: %s Height: %s" % (image.size[0], image.size[1]))
AssertionError: Width: 75 Height: 97

----------------------------------------------------------------------

The image is unchanged. Anyone have any idea what I'm doing wrong?
I've tried opening the file, and outputting to a different file
(instead of overwriting the file), but the new file always comes out
the same as the original.
 
M

Marc 'BlackJack' Rintsch

I am having a problem using PIL. I am trying to crop and image to a
square, starting from the center of the image, but when I try to crop
the image, it won't crop. Here are the relevant code snippets:

### Function I am testing ###
def create_square_image(file_name):
""" Creates a thumbnail sized image and turns it into a square """
image = Image.open(open(file_name))

size_tuple = image.size
width = size_tuple[0]
height = size_tuple[1]

square_length = 75

x1 = (width / 2) - (square_length / 2) x2 = x1 + square_length
y1 = (height / 2) - (square_length / 2) y2 = y1 + square_length

image.crop((x1,y1,x2,y2))

This doesn't change `image` but creates and returns a new cropped image
which you simply ignore.
image.save(file_name, "JPEG")

Ciao,
Marc 'BlackJack' Rintsch
 
B

bfrederi

I am having a problem using PIL. I am trying to crop and image to a
square, starting from the center of the image, but when I try to crop
the image, it won't crop. Here are the relevant code snippets:
### Function I am testing ###
def create_square_image(file_name):
    """ Creates a thumbnail sized image and turns it into a square """
    image = Image.open(open(file_name))
    size_tuple = image.size
    width = size_tuple[0]
    height = size_tuple[1]
    square_length = 75
    x1 = (width / 2) - (square_length / 2) x2 = x1 + square_length
    y1 = (height / 2) - (square_length / 2) y2 = y1 + square_length
    image.crop((x1,y1,x2,y2))

This doesn't change `image` but creates and returns a new cropped image
which you simply ignore.
    image.save(file_name, "JPEG")

Ciao,
        Marc 'BlackJack' Rintsch

How do I output it to an actual file then? Or overwrite the existing
file?
 
P

Peter Otten

bfrederi said:
How do I output it to an actual file then? Or overwrite the existing
file?

cropped_image = image.crop(...)
cropped_image.save(...)

Peter
 
B

bfrederi

I am having a problem using PIL. I am trying to crop and image to a
square, starting from the center of the image, but when I try to crop
the image, it won't crop. Here are the relevant code snippets:
### Function I am testing ###
def create_square_image(file_name):
    """ Creates a thumbnail sized image and turns it into a square """
    image = Image.open(open(file_name))
    size_tuple = image.size
    width = size_tuple[0]
    height = size_tuple[1]
    square_length = 75
    x1 = (width / 2) - (square_length / 2) x2 = x1 + square_length
    y1 = (height / 2) - (square_length / 2) y2 = y1 + square_length
    image.crop((x1,y1,x2,y2))
This doesn't change `image` but creates and returns a new cropped image
which you simply ignore.
Ciao,
        Marc 'BlackJack' Rintsch

How do I output it to an actual file then? Or overwrite the existing
file?

Nevermind, I gotcha. I needed to do this:

def create_square_image(file_name):
""" Creates a thumbnail sized image and turns it into a square """
image = Image.open(open(file_name))

size_tuple = image.size
width = size_tuple[0]
height = size_tuple[1]

square_length = 75

x1 = (width / 2) - (square_length / 2)
x2 = x1 + square_length
y1 = (height / 2) - (square_length / 2)
y2 = y1 + square_length

new_image = image.crop((x1,y1,x2,y2))
try:
new_image.save(file_name, "JPEG")
except IOError:
print "Cannot create square image for", file_name

I needed to output the cropped image by getting the cropped image in
"new_image" and outputting the new file. I see what you were saying.
 
B

bfrederi

I am having a problem using PIL. I am trying to crop and image to a
square, starting from the center of the image, but when I try to crop
the image, it won't crop. Here are the relevant code snippets:
### Function I am testing ###
def create_square_image(file_name):
    """ Creates a thumbnail sized image and turns it into a square """
    image = Image.open(open(file_name))
    size_tuple = image.size
    width = size_tuple[0]
    height = size_tuple[1]
    square_length = 75
    x1 = (width / 2) - (square_length / 2) x2 = x1 + square_length
    y1 = (height / 2) - (square_length / 2) y2 = y1 + square_length
    image.crop((x1,y1,x2,y2))
This doesn't change `image` but creates and returns a new cropped image
which you simply ignore.
Ciao,
        Marc 'BlackJack' Rintsch

How do I output it to an actual file then? Or overwrite the existing
file?

Nevermind, I gotcha. I needed to do this:

def create_square_image(file_name):
""" Creates a thumbnail sized image and turns it into a square """
image = Image.open(open(file_name))

size_tuple = image.size
width = size_tuple[0]
height = size_tuple[1]

square_length = 75

x1 = (width / 2) - (square_length / 2)
x2 = x1 + square_length
y1 = (height / 2) - (square_length / 2)
y2 = y1 + square_length

new_image = image.crop((x1,y1,x2,y2))
try:
new_image.save(file_name, "JPEG")
except IOError:
print "Cannot create square image for", file_name

I needed to output the cropped image by getting the cropped image in
"new_image" and outputting the new file. I see what you were saying.
 
J

J Kenneth King

bfrederi said:
I am having a problem using PIL. I am trying to crop and image to a
square, starting from the center of the image, but when I try to crop
the image, it won't crop. Here are the relevant code snippets:

### Function I am testing ###
def create_square_image(file_name):
""" Creates a thumbnail sized image and turns it into a square """
image = Image.open(open(file_name))

size_tuple = image.size
width = size_tuple[0]
height = size_tuple[1]

square_length = 75

x1 = (width / 2) - (square_length / 2)
x2 = x1 + square_length
y1 = (height / 2) - (square_length / 2)
y2 = y1 + square_length

image.crop((x1,y1,x2,y2))
image.save(file_name, "JPEG")

def create_square_image(filename, size=75):
file = open(filename, 'rb')
image = Image.open(file)
w, h = image.size

x1 = (w / 2) - (size / 2)
x2 = x1 + size
y1 = (h / 2) - (size / 2)
y2 = y1 + size

thumb = image.crop((x1,y1,x2,y2))
thumb.save("thumb_" + filename, "JPEG")

....

of course PIL has a thumbnail method that does this type of stuff.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,226
Members
46,815
Latest member
treekmostly22

Latest Threads

Top