Automattic / Automattic/node-canvas
Wrong Image ColorSpace in PDF for JPEG with ICC
- Dominant language
- JavaScript
- Stars
- 10.7k
- Forks
- 1.2k
- Avg merge
- 4d 8h
- Merged PRs (30d)
- 1
Description
## Issue
If you create a PDF file, JPEG images with ICC profile are saved in the wrong color space.
## Steps to Reproduce
With a JPEG image with an embedded ICC profile:
```js
const fs = require('fs')
const { Image, createCanvas } = require('canvas')
const canvas = createCanvas(100, 100, 'pdf')
const image = new Image()
image.dataMode = Image.MODE_MIME | Image.MODE_IMAGE
image.onload = () => {
canvas.width = image.width
canvas.height = image.height
const ctx = canvas.getContext('2d')
ctx.drawImage(image, 0, 0, image.width, image.height)
fs.writeFileSync('out.pdf', canvas.toBuffer())
}
image.src = 'image-with-icc-profile.jpg'
```
This embeds the JPEG image (with embedded ICC profile) unchanged in the PDF and sets its color space to `DeviceRGB`. This means that the ICC profile is not applied to the image.
The correct behavior would be to save the ICC profile as a further stream in the PDF and to reference it as `ICCBased` color space.
## Environment
* node-canvas 2.6.1
* node 12.18.2 on Ubuntu 18.04.4
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.