У вас есть аргументы в обратном порядке:
Image.fromstring(mode, size, data, decoder_name='raw', *args)
так
Image.fromstring("RGBA", old_image.size, contents)
Но учтите, что намного проще читать непосредственно из объекта StringIO
:
output = StringIO.StringIO()
old_image.save(output, format="PNG")
output.seek(0)
new_image = Image.open(output)