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

View File

@ -52,10 +52,15 @@ static PyObject *
magick_Image_load(magick_Image *self, PyObject *args, PyObject *kwargs) {
const char *data;
Py_ssize_t dlen;
MagickBooleanType res;
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);
Py_RETURN_NONE;
@ -75,7 +80,10 @@ magick_Image_export(magick_Image *self, PyObject *args, PyObject *kwargs) {
return NULL;
}
Py_BEGIN_ALLOW_THREADS
data = MagickGetImageBlob(self->wand, &len);
Py_END_ALLOW_THREADS
if (data == NULL || len < 1)
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;
FilterTypes filter;
double blur;
MagickBooleanType res;
if (val == NULL) {
return -1;
@ -126,7 +135,11 @@ magick_Image_size_setter(magick_Image *self, PyObject *val, void *closure) {
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);
return -1;
}
@ -143,6 +156,25 @@ magick_Image_format_getter(magick_Image *self, void *closure) {
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[] = {
{"load", (PyCFunction)magick_Image_load, METH_VARARGS,
@ -157,13 +189,13 @@ static PyMethodDef magick_Image_methods[] = {
};
static PyGetSetDef magick_Image_getsetters[] = {
{(char *)"size",
{(char *)"size_",
(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.",
NULL},
{(char *)"format",
(getter)magick_Image_format_getter, NULL,
{(char *)"format_",
(getter)magick_Image_format_getter, (setter)magick_Image_format_setter,
(char *)"Image format",
NULL},