Merge pull request #47 from d-schmidt/master

Solved issue #46 and picked the last missing py3k changes
This commit is contained in:
Alex Clark ☺ 2013-02-27 15:22:27 -08:00
commit 1b119b3f41
7 changed files with 35 additions and 19 deletions

View File

@ -614,7 +614,11 @@ class Image:
self.palette.mode = "RGB" self.palette.mode = "RGB"
self.palette.rawmode = None self.palette.rawmode = None
if "transparency" in self.info: if "transparency" in self.info:
self.im.putpalettealpha(self.info["transparency"], 0) if self.info["transparency_palette"]:
self.im.putpalettealpha(0, 0, self.info["transparency_palette"])
else:
self.im.putpalettealpha(self.info["transparency"], 0)
self.palette.mode = "RGBA" self.palette.mode = "RGBA"
if self.im: if self.im:
return self.im.pixel_access(self.readonly) return self.im.pixel_access(self.readonly)

View File

@ -254,6 +254,7 @@ class PngStream(ChunkStream):
i = s.find(b"\0") i = s.find(b"\0")
if i >= 0: if i >= 0:
self.im_info["transparency"] = i self.im_info["transparency"] = i
self.im_info["transparency_palette"] = s
elif self.im_mode == "L": elif self.im_mode == "L":
self.im_info["transparency"] = i16(s) self.im_info["transparency"] = i16(s)
elif self.im_mode == "RGB": elif self.im_mode == "RGB":

View File

@ -733,13 +733,13 @@ _convert(ImagingObject* self, PyObject* args)
return NULL; return NULL;
if (paletteimage != NULL) { if (paletteimage != NULL) {
if (!PyImaging_Check(paletteimage)) { if (!PyImaging_Check(paletteimage)) {
PyObject_Print((PyObject *)paletteimage, stderr, 0); PyObject_Print((PyObject *)paletteimage, stderr, 0);
PyErr_SetString(PyExc_ValueError, "palette argument must be image with mode 'P'"); PyErr_SetString(PyExc_ValueError, "palette argument must be image with mode 'P'");
return NULL; return NULL;
} }
if (paletteimage->image->palette == NULL) { if (paletteimage->image->palette == NULL) {
PyErr_SetString(PyExc_ValueError, "null palette"); PyErr_SetString(PyExc_ValueError, "null palette");
return NULL; return NULL;
} }
} }
@ -1407,7 +1407,9 @@ _putpalettealpha(ImagingObject* self, PyObject* args)
{ {
int index; int index;
int alpha = 0; int alpha = 0;
if (!PyArg_ParseTuple(args, "i|i", &index, &alpha)) char* tpalette = NULL;
int tpaletteSize = 0;
if (!PyArg_ParseTuple(args, "i|i"PY_ARG_BYTES_LENGTH, &index, &alpha, &tpalette, &tpaletteSize))
return NULL; return NULL;
if (!self->image->palette) { if (!self->image->palette) {
@ -1421,7 +1423,15 @@ _putpalettealpha(ImagingObject* self, PyObject* args)
} }
strcpy(self->image->palette->mode, "RGBA"); strcpy(self->image->palette->mode, "RGBA");
self->image->palette->palette[index*4+3] = (UINT8) alpha;
if (tpaletteSize > 0) {
for (index = 0; index < tpaletteSize; index++) {
self->image->palette->palette[index*4+3] = (UINT8) tpalette[index];
}
}
else {
self->image->palette->palette[index*4+3] = (UINT8) alpha;
}
Py_INCREF(Py_None); Py_INCREF(Py_None);
return Py_None; return Py_None;
@ -3391,3 +3401,4 @@ init_imaging(void)
} }
#endif #endif

View File

@ -483,7 +483,7 @@ cms_get_display_profile_win32(PyObject* self, PyObject* args)
} }
if (ok) if (ok)
return PyString_FromStringAndSize(filename, filename_size-1); return PyUnicode_FromStringAndSize(filename, filename_size-1);
Py_INCREF(Py_None); Py_INCREF(Py_None);
return Py_None; return Py_None;

View File

@ -346,7 +346,7 @@ PyImaging_GrabScreenWin32(PyObject* self, PyObject* args)
/* step 3: extract bits from bitmap */ /* step 3: extract bits from bitmap */
buffer = PyString_FromStringAndSize(NULL, height * ((width*3 + 3) & -4)); buffer = PyBytes_FromStringAndSize(NULL, height * ((width*3 + 3) & -4));
if (!buffer) if (!buffer)
return NULL; return NULL;
@ -355,7 +355,7 @@ PyImaging_GrabScreenWin32(PyObject* self, PyObject* args)
core.bcHeight = height; core.bcHeight = height;
core.bcPlanes = 1; core.bcPlanes = 1;
core.bcBitCount = 24; core.bcBitCount = 24;
if (!GetDIBits(screen_copy, bitmap, 0, height, PyString_AS_STRING(buffer), if (!GetDIBits(screen_copy, bitmap, 0, height, PyBytes_AS_STRING(buffer),
(BITMAPINFO*) &core, DIB_RGB_COLORS)) (BITMAPINFO*) &core, DIB_RGB_COLORS))
goto error; goto error;
@ -386,11 +386,11 @@ static BOOL CALLBACK list_windows_callback(HWND hwnd, LPARAM lParam)
/* get window title */ /* get window title */
title_size = GetWindowTextLength(hwnd); title_size = GetWindowTextLength(hwnd);
if (title_size > 0) { if (title_size > 0) {
title = PyString_FromStringAndSize(NULL, title_size); title = PyUnicode_FromStringAndSize(NULL, title_size);
if (title) if (title)
GetWindowText(hwnd, PyString_AS_STRING(title), title_size+1); GetWindowText(hwnd, PyUnicode_AS_UNICODE(title), title_size+1);
} else } else
title = PyString_FromString(""); title = PyUnicode_FromString("");
if (!title) if (!title)
return 0; return 0;
@ -545,7 +545,7 @@ PyImaging_GrabClipboardWin32(PyObject* self, PyObject* args)
size = wcslen(data) * 2; size = wcslen(data) * 2;
#endif #endif
result = PyString_FromStringAndSize(data, size); result = PyBytes_FromStringAndSize(data, size);
GlobalUnlock(handle); GlobalUnlock(handle);
@ -853,7 +853,7 @@ PyImaging_DrawWmf(PyObject* self, PyObject* args)
GdiFlush(); GdiFlush();
buffer = PyString_FromStringAndSize(ptr, height * ((width*3 + 3) & -4)); buffer = PyBytes_FromStringAndSize(ptr, height * ((width*3 + 3) & -4));
error: error:
DeleteEnhMetaFile(meta); DeleteEnhMetaFile(meta);

View File

@ -157,7 +157,7 @@ def testimage():
def check_module(feature, module): def check_module(feature, module):
try: try:
__import__("PIL." + module) __import__(module)
except ImportError: except ImportError:
print("***", feature, "support not installed") print("***", feature, "support not installed")
else: else:

View File

@ -95,7 +95,7 @@ class pil_build_ext(build_ext):
# #
# add configured kits # add configured kits
for root in (TCL_ROOT, JPEG_ROOT, TCL_ROOT, TIFF_ROOT, ZLIB_ROOT, for root in (TCL_ROOT, JPEG_ROOT, TIFF_ROOT, ZLIB_ROOT,
FREETYPE_ROOT, LCMS_ROOT): FREETYPE_ROOT, LCMS_ROOT):
if isinstance(root, type(())): if isinstance(root, type(())):
lib_root, include_root = root lib_root, include_root = root