Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 2 additions & 9 deletions src/PIL/ImageCms.py
Original file line number Diff line number Diff line change
Expand Up @@ -309,15 +309,8 @@ def point(self, im: Image.Image) -> Image.Image:
return self.apply(im)

def apply(self, im: Image.Image, imOut: Image.Image | None = None) -> Image.Image:
if im.mode != self.input_mode:
msg = "mode mismatch"
raise ValueError(msg)
if imOut is not None:
if imOut.mode != self.output_mode:
msg = "mode mismatch"
raise ValueError(msg)
else:
imOut = Image.new(self.output_mode, im.size, None)
if imOut is None:
imOut = Image.new(self.output_mode, im.size)
self.transform.apply(im.getim(), imOut.getim())
imOut.info["icc_profile"] = self.output_profile.tobytes()
return imOut
Expand Down
15 changes: 12 additions & 3 deletions src/_imagingcms.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,14 +182,16 @@ cms_profile_dealloc(CmsProfileObject *self) {

typedef struct {
PyObject_HEAD cmsHTRANSFORM transform;
ModeID in_mode;
ModeID out_mode;
} CmsTransformObject;

static PyTypeObject CmsTransform_Type;

#define CmsTransform_Check(op) (Py_TYPE(op) == &CmsTransform_Type)

static PyObject *
cms_transform_new(cmsHTRANSFORM transform) {
cms_transform_new(cmsHTRANSFORM transform, ModeID in_mode, ModeID out_mode) {
CmsTransformObject *self;

self = PyObject_New(CmsTransformObject, &CmsTransform_Type);
Expand All @@ -198,6 +200,8 @@ cms_transform_new(cmsHTRANSFORM transform) {
}

self->transform = transform;
self->in_mode = in_mode;
self->out_mode = out_mode;

return (PyObject *)self;
}
Expand Down Expand Up @@ -475,7 +479,7 @@ buildTransform(PyObject *self, PyObject *args) {
return NULL;
}

return cms_transform_new(transform);
return cms_transform_new(transform, findModeID(sInMode), findModeID(sOutMode));
}

static PyObject *
Expand Down Expand Up @@ -524,7 +528,7 @@ buildProofTransform(PyObject *self, PyObject *args) {
return NULL;
}

return cms_transform_new(transform);
return cms_transform_new(transform, findModeID(sInMode), findModeID(sOutMode));
}

static PyObject *
Expand Down Expand Up @@ -552,6 +556,11 @@ cms_transform_apply(CmsTransformObject *self, PyObject *args) {
return NULL;
}

if (self->in_mode != im->mode || self->out_mode != imOut->mode) {
PyErr_SetString(PyExc_ValueError, "mode mismatch");
return NULL;
}

return Py_BuildValue("i", pyCMSdoTransform(im, imOut, self->transform));
}

Expand Down
Loading