This commit is contained in:
Kovid Goyal 2010-08-02 10:03:14 -06:00
parent e4ab5891aa
commit f8c64c8f1d
2 changed files with 43 additions and 13 deletions

View File

@ -50,17 +50,16 @@ class Image(_magick.Image):
@dynamic_property @dynamic_property
def format(self): def format(self):
def fget(self): def fget(self):
ans = super(Image, self).format return self.format_.decode('utf-8', 'ignore').lower()
return ans.decode('utf-8', 'ignore').lower()
def fset(self, val): def fset(self, val):
super(Image, self).format = str(val) self.format_ = str(val)
return property(fget=fget, fset=fset, doc=_magick.Image.format.__doc__) return property(fget=fget, fset=fset, doc=_magick.Image.format_.__doc__)
@dynamic_property @dynamic_property
def size(self): def size(self):
def fget(self): def fget(self):
return super(Image, self).size return self.size_
def fset(self, val): def fset(self, val):
filter = 'CatromFilter' filter = 'CatromFilter'
if len(val) > 2: if len(val) > 2:
@ -69,9 +68,8 @@ class Image(_magick.Image):
blur = 1.0 blur = 1.0
if len(val) > 3: if len(val) > 3:
blur = float(val[3]) blur = float(val[3])
super(Image, self).format = (int(val[0]), int(val[1]), filter, self.size_ = (int(val[0]), int(val[1]), filter, blur)
blur) return property(fget=fget, fset=fset, doc=_magick.Image.size_.__doc__)
return property(fget=fget, fset=fset, doc=_magick.Image.size.__doc__)
def save(self, path, format=None): def save(self, path, format=None):

View File

@ -52,10 +52,15 @@ static PyObject *
magick_Image_load(magick_Image *self, PyObject *args, PyObject *kwargs) { magick_Image_load(magick_Image *self, PyObject *args, PyObject *kwargs) {
const char *data; const char *data;
Py_ssize_t dlen; Py_ssize_t dlen;
MagickBooleanType res;
if (!PyArg_ParseTuple(args, "s#", &data, &dlen)) return NULL; if (!PyArg_ParseTuple(args, "s#", &data, &dlen)) return NULL;
if (!MagickReadImageBlob(self->wand, data, dlen)) Py_BEGIN_ALLOW_THREADS
res = MagickReadImageBlob(self->wand, data, dlen);
Py_END_ALLOW_THREADS
if (!res)
return magick_set_exception(self->wand); return magick_set_exception(self->wand);
Py_RETURN_NONE; Py_RETURN_NONE;
@ -75,7 +80,10 @@ magick_Image_export(magick_Image *self, PyObject *args, PyObject *kwargs) {
return NULL; return NULL;
} }
Py_BEGIN_ALLOW_THREADS
data = MagickGetImageBlob(self->wand, &len); data = MagickGetImageBlob(self->wand, &len);
Py_END_ALLOW_THREADS
if (data == NULL || len < 1) if (data == NULL || len < 1)
return magick_set_exception(self->wand); return magick_set_exception(self->wand);
@ -100,6 +108,7 @@ magick_Image_size_setter(magick_Image *self, PyObject *val, void *closure) {
Py_ssize_t width, height; Py_ssize_t width, height;
FilterTypes filter; FilterTypes filter;
double blur; double blur;
MagickBooleanType res;
if (val == NULL) { if (val == NULL) {
return -1; return -1;
@ -126,7 +135,11 @@ magick_Image_size_setter(magick_Image *self, PyObject *val, void *closure) {
return -1; return -1;
} }
if (!MagickResizeImage(self->wand, width, height, filter, blur)) { Py_BEGIN_ALLOW_THREADS
res = MagickResizeImage(self->wand, width, height, filter, blur);
Py_END_ALLOW_THREADS
if (!res) {
magick_set_exception(self->wand); magick_set_exception(self->wand);
return -1; return -1;
} }
@ -143,6 +156,25 @@ magick_Image_format_getter(magick_Image *self, void *closure) {
return Py_BuildValue("s", fmt); return Py_BuildValue("s", fmt);
} }
static int
magick_Image_format_setter(magick_Image *self, PyObject *val, void *closure) {
char *fmt;
if (val == NULL) {
return -1;
PyErr_SetString(PyExc_TypeError, "Cannot delete image format");
}
fmt = PyString_AsString(val);
if (fmt == NULL) return -1;
if (!MagickSetImageFormat(self->wand, fmt)) {
PyErr_SetString(PyExc_ValueError, "Unknown image format");
return -1;
}
return 0;
}
static PyMethodDef magick_Image_methods[] = { static PyMethodDef magick_Image_methods[] = {
{"load", (PyCFunction)magick_Image_load, METH_VARARGS, {"load", (PyCFunction)magick_Image_load, METH_VARARGS,
@ -157,13 +189,13 @@ static PyMethodDef magick_Image_methods[] = {
}; };
static PyGetSetDef magick_Image_getsetters[] = { static PyGetSetDef magick_Image_getsetters[] = {
{(char *)"size", {(char *)"size_",
(getter)magick_Image_size_getter, (setter)magick_Image_size_setter, (getter)magick_Image_size_getter, (setter)magick_Image_size_setter,
(char *)"Image size (width, height). When setting pass in (width, height, filter, blur). See MagickResizeImage docs.", (char *)"Image size (width, height). When setting pass in (width, height, filter, blur). See MagickResizeImage docs.",
NULL}, NULL},
{(char *)"format", {(char *)"format_",
(getter)magick_Image_format_getter, NULL, (getter)magick_Image_format_getter, (setter)magick_Image_format_setter,
(char *)"Image format", (char *)"Image format",
NULL}, NULL},