| Differences between
and this patch
- Source/WebCore/ChangeLog +17 lines
Lines 1-3 Source/WebCore/ChangeLog_sec1
1
2011-02-03  Hironori Bono  <hbono@chromium.org>
2
3
        Reviewed by NOBODY (OOPS!).
4
5
        [chromium] JPEG corruption
6
        https://bugs.webkit.org/show_bug.cgi?id=53250
7
8
        Same as gray-scale JPEGs, we convert the colors of CMYK JPEGs with color
9
        profiles from CMYK to RGB twice and it causes color corruption. This
10
        change suppresses the color profiles for CMYK JPEGs same as gray-scale
11
        ones.
12
13
        Test: fast/images/cmyk-jpeg-with-color-profile.html
14
15
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
16
        (WebCore::JPEGImageReader::decode):
17
1
2011-02-03  Maciej Stachowiak  <mjs@apple.com>
18
2011-02-03  Maciej Stachowiak  <mjs@apple.com>
2
19
3
        Reviewed by Dan Bernstein.
20
        Reviewed by Dan Bernstein.
- Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp +6 lines
Lines 222-227 public: Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp_sec1
222
                // jpeglib cannot convert these to rgb, but it can convert ycck
222
                // jpeglib cannot convert these to rgb, but it can convert ycck
223
                // to cmyk.
223
                // to cmyk.
224
                m_info.out_color_space = JCS_CMYK;
224
                m_info.out_color_space = JCS_CMYK;
225
226
                // Same as graysclale images, we convert CMYK images to RGBA
227
                // ones. When we keep the color profiles of these CMYK images,
228
                // CoreGraphics will convert their colors again. So, we discard
229
                // their color profiles to prevent this color corruption.
230
                m_decoder->setIgnoreGammaAndColorProfile(true);
225
                break;
231
                break;
226
            default:
232
            default:
227
                return m_decoder->setFailed();
233
                return m_decoder->setFailed();
- LayoutTests/ChangeLog +16 lines
Lines 1-3 LayoutTests/ChangeLog_sec1
1
2011-02-03  Hironori Bono  <hbono@chromium.org>
2
3
        Reviewed by NOBODY (OOPS!).
4
5
        [chromium] JPEG corruption
6
        https://bugs.webkit.org/show_bug.cgi?id=53250
7
8
        This change adds a new script test that we can render a CMYK JPEG with a
9
        color profile correctly, i.e. we can render it without color corruption.
10
11
        * fast/images/cmyk-jpeg-with-color-profile-expected.txt: Added.
12
        * fast/images/cmyk-jpeg-with-color-profile.html: Added.
13
        * fast/images/resources/cmyk-jpeg.jpg: Added.
14
        * fast/images/script-tests/cmyk-jpeg-with-color-profile.js: Added.
15
        (image.onload):
16
1
2011-02-03  James Kozianski  <koz@chromium.org>
17
2011-02-03  James Kozianski  <koz@chromium.org>
2
18
3
        Reviewed by Dimitri Glazkov.
19
        Reviewed by Dimitri Glazkov.
- LayoutTests/fast/images/cmyk-jpeg-with-color-profile-expected.txt +11 lines
Line 0 LayoutTests/fast/images/cmyk-jpeg-with-color-profile-expected.txt_sec1
1
Test that we can render a CMYK JPEG without color corruption.
2
3
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
4
5
6
PASS green > red is true
7
PASS green > blue is true
8
PASS successfullyParsed is true
9
10
TEST COMPLETE
11
0
  + LF
12
  + LF
- LayoutTests/fast/images/cmyk-jpeg-with-color-profile.html +14 lines
Line 0 LayoutTests/fast/images/cmyk-jpeg-with-color-profile.html_sec1
1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2
<html>
3
<head>
4
<link rel="stylesheet" href="../js/resources/js-test-style.css">
5
<script src="../js/resources/js-test-pre.js"></script>
6
</head>
7
<body>
8
<p id="description"></p>
9
<div id="console"></div>
10
<canvas id="canvas1" width="64" height="64"></canvas>
11
<script src="script-tests/cmyk-jpeg-with-color-profile.js"></script>
12
<script src="../js/resources/js-test-post.js"></script>
13
</body>
14
</html>
0
  + LF
15
  + LF
- LayoutTests/fast/images/script-tests/cmyk-jpeg-with-color-profile.js +48 lines
Line 0 LayoutTests/fast/images/script-tests/cmyk-jpeg-with-color-profile.js_sec1
1
description("Test that we can render a CMYK JPEG without color corruption.");
2
3
// This is an async test because it has to wait for WebKit to load an image.
4
jsTestIsAsync = true;
5
6
// The colors used for verifying the test results.
7
var red = 0, green = 0, blue = 0, alpha = 0;
8
9
// Create a canvas element. This element is used for pasting a CMYK JPEG and
10
// reading its pixels.
11
var canvas = document.createElement("canvas");
12
canvas.id = 'canvas1';
13
canvas.width = 64;
14
canvas.height = 64;
15
16
// Create an image object and load a CMYK JPEG.
17
var image = new Image();
18
image.onload = function() {
19
    // Paste the loaded JPEG ('resources/cmyk-jpeg.jpg') to the canvas.
20
    var context = canvas.getContext("2d");
21
    context.drawImage(image, 0, 0);
22
    var data = context.getImageData(0, 0, canvas.width, canvas.height);
23
24
    // Read the pixels in the canvas and calcualte their avarage values.
25
    // (DumpRenderTree always allows to read them.)
26
    for (var i = 0; i < canvas.width * canvas.height * 4; i += 4) {
27
        red += data.data[i + 0];
28
        green += data.data[i + 1];
29
        blue += data.data[i + 2];
30
        alpha += data.data[i + 3];
31
    }
32
    red   /= canvas.width * canvas.height;
33
    green /= canvas.width * canvas.height;
34
    blue  /= canvas.width * canvas.height;
35
    alpha /= canvas.width * canvas.height;
36
37
    // Even though the output colors depend on the device-color profile (i.e.
38
    // they depend on devices), green must be the most prominent color because
39
    // the source image only consists of green. So, we test it.
40
    shouldBeTrue("green > red");
41
    shouldBeTrue("green > blue");
42
43
    // Notify this test has been finished.
44
    finishJSTest();
45
}
46
image.src = "resources/cmyk-jpeg.jpg";
47
48
var successfullyParsed = true;
0
  + LF
49
  + LF
- LayoutTests/fast/images/resources/cmyk-jpeg.jpg +57 lines
Line 2 LayoutTests/fast/images/resources/cmyk-jpeg.jpg_sec1
3
0C/lYB9ozLRkFt+jCY8iuN/tpihsImD6opdq+KC9nvSp0KCKmzoorSBnV3hniCBPk7zmXeBBkCC
4
29pfm19T1pRftF9skVmf11+NzEAgCF+5NQje/OHFMDXfCiGBKztfGCFAphSfKmEKINlfQGDa25c
5
cbchkd65bU0hX57H6KnhMl7Wo90hCl7pXvNg5t8CmgBgyF8i1RfgrR9IEDugmZ93C4ngjp+y8Wz
6
V/NhwSAvk3MhdCAjDwdhK6Aaitag5OAVLZojMWMAKXbizmKnZTDiciJNoMmiHCH6XEahz2Gtl8G
7
jrYgmaKaCr2gaGFfLL2igKwSKJ3iIirpJFUhxmmuX/Ahcyhpm4UhLGckVyAg8CXZ0tdgtKSCzqi
8
DEnlCxrCylfkGtvTCJejL1z0xyliV54aFraoqxfcFLUn/RiHkp9nPZk+kIEmatoBjmFliBrRzE9
9
qBQZe+jUXXkpFOG2qJbltCgZaTInXCwxZx7tcKcg7m/mom+vJWLwrqQjMW4jI/JtoiSzLOEl8+y
10
FbbVPlX2VT5V9lU+VfZVPlX2VT5V9lU+VfZVPlX/1kmA/9XLgX/YC8H/2o2Df9xPhX/c0ge/3JR
11
09D2PtP25oAAMqpAgC7swIAsL0DAKXJBQCb1gkAlOgUAYzpJQSE6DMLe+g8FHPoRBtr6EsiZOdS
12
n8AANiOAADJmwEAvqUCALStAQCrtQAAob8EAJvBFACUwSUCjMAzCIS/PhF8vUgZdbxQIW+6WCdq
13
H0WM/mIFzH5lBgv+qEZLvqvGi37vhos+88bK/vnGyv76xsr++sbK/vrGyv76xsr++sbqKoAAJq0
14
CupSv8rqEv/K6dL/yunS/8rp0v/K6dL/yunS/8r/0kSAP9QDgD/WRAA/18SAP9jFgDyZR0A52Ul
15
rMCEPvGAhD73QIQ++kCEPvpAhD76QIQ++kCj6sAAIG0AABzvQAAZsYAAFnNAABL0wAAQNkAADXe
16
zdhBvc1bAf1NHYI8jN/CfAyhwrvMo8L7TKWC+wxnAzqMaIM6TGpDOgxsA3mMbkN5THDDeMy0Q3f
17
BFCcf8QQ3D/EENw/xBDcP8QwWMAALNsAACocwAAm3YAAI51AACBdgAAdXYAAGl4AABjegIAXnwO
18
QZlQP8GZUD/BmVA/wVlQP8F3D4AAMdGAAC5SwAArEwAAKBKAACXRwAAkUMAAItDCACGQxIAgkQe
19
gC0AP8AtAD/ALQA/wC0AP8A/wQAAP8AAAD/AAAA/wAGAOwADQDlABYA3gAiANcALwDRADsAzQBF
Line 5 LayoutTests/fast/images/resources/cmyk-jpeg.jpg_sec2
8
b0gU+q3KHzMqESqxqVdtMKjcLq+on+/vKCIw7mbiMa3mIjKtZWJzbOSitCxj4vSsIyN1K+KkNau
9
qlEZO+tQ3XksUKF27RElNK1SqHLt1Oryr5frb23briysHzCqaqGy5ylhNKNoIfYhqCX2YeeotOH
10
Xx3ZvN6gG/ud4h36nWPfedylYLkcJqF426eiOFsoovga6eN32mrjt5or5DdZ7SR3Wa6kdxlwZLc
11
0n2UPZL+VDwTftP6k/7UOdP/FDnT/xQ50/8UOdP/FDnT/xQ50/8UP9cHAL/WCYD/1IyBv9ROgj/
12
ViYTPdWoU/1VatR81O1U/FSwVTvUdBV61HnVeZS9lbaVPlYzFb6WcNY+1q8Wvtat1v7WbNc+1mz
13
o0ZAO2THwHimSgC2JkzCMyVQhTEkE4hvItZLbSFYjeugWtAqHxzSKJ5fE6ddoVUmXOOWJVxmFyR
14
UIJRPlLC0H6VA4++lwQO/tlEjj7bxQ1+3sWMvyJGDD9mBku/aobLP6/HCv/4x0q/PodKvr/HSr3
15
WAQAOthFgDhYiEA1mIxAc5hQQXHX04LwlxZEb1aZBe5WG0btlZ2H7NVfiKwU4clrlKPKKtRmCqp
16
QAAEv8AABD/CAAO/w4ADP8RAAn/FgAG/xwAA/8iAAD/KgAA/zMAAP89AAD/SQAA/1cAAP9pAAD/
17
QHsEv8C6xP/AuoT/wPpE/8D6RP/A+kT/wPpE/8D6RP/A/8mHQD/KBgA/ygWAP8mFgD/Jh0A/yYo
18
AAAAPoAAAD9BwAA/w0AAP8SAAD/GwAA/ygAAP83AAD/SgAA/14AAP92AAD/jwAA/6YAAP+6AAD/
19
ACdAPcAowD1AKoA9ACyAPIAuwDxAMgA7wDcAO4A7ADtAPoA6wD/AOoA/wDqAP8A6gD/AOoA/wDq
20
AIemv8CHpn/Ax6X/wMel/8DHpf/A6p9AACehQAAk4sAAIWKAAB1iwAAaI4AAFuRAABQlQAARpkA
21
wChAPoAqQD4ALQA9wDCAPYA2gD1APEA9AD/APMA/wDzAP8A6QD/AOAA/wDYAP8A0wD/AP8ADgD/
22
QA2AP8ANwD/AJgNAACDDgAAchAAAGURAABbEQAAUxAAAE4QAABKDgAASA0AAEcKAwBHBwoARQQO
23
vv7/Pz9/f7+/wABAQICAwMEBAUGBgcHCAgJCQoLCwwMDQ0ODw8QEBEREhMTFBQVFhYXFxgZGRoa
Line 1 LayoutTests/fast/images/resources/cmyk-jpeg.jpg_sec3
Line 1 LayoutTests/fast/images/resources/cmyk-jpeg.jpg_sec4
Line 1 LayoutTests/fast/images/resources/cmyk-jpeg.jpg_sec5
55
r5kZOy8bHngtXKN0613nsqkeq3CnH65vJaCw7eQh8qyi4zSroeV2KaDndqhgqHVoYKh1aGCodWh
56
WFdhPRqZXzwcGp27XZucet6cW3pfnRr6IJ2aOaFd2bliHlj5Ix6YeORfGDjknxg45J8YOOSfGDj
57
JteW/ibXlv4m15b+JteW/ibXlv4m176uQ4AzcsJAMDmDQGy/CAIp/8zE5r/OR2N/z8mgv9GLnr/
58
I2CZ/KIi3HsgpN56HyZgOR4nobhdKOK33Gojt1vrpHbbbOU2my5lthrwpjVacyazGXLm8xly5vM
59
5N8YvSNhm3uh4536ICVgOR6nIfgdaKM3XKokdpvr5XYbbeZ1WvAnNJpyZ7JZcmewmfNmL5p0ZO+
60
7hSOvO5WkvquGJe4bFqcNOpcIHIoHePv5l+mbeShaKwjIypqoiUrqWEnLKggqS1nYGutpl/t7eU
61
HidZ/V0pG3ycapx8G6wdO5rtnfsab566mfHfedlzn/iYtaA2V/dgdBf4H7MYON7zGDje8xg43vM
62
FvRXfhb0V34W9Fd+Fv/aR4D/2UoBf9uKwf/eC4K/382Dv+DPxT/hUgc/4dTJf+EYC//gGw4/3x5
Line 7 LayoutTests/fast/images/resources/cmyk-jpeg.jpg_sec6
09
GOUQPZhnET0XqRI8lysS/FbtE3vWb1Q7VjJUutX2lPnVulV5Ff1VOFZ/U/bWv9L1Vv/SNBc/0TP
10
VyFe/lchXv5XIV7+Vz/YxoC/3MUAf+BFQH/jhkB/5keAfahIwLqqSoE4K8yB9KsPhXHpkskvaBV
11
F5co/ldXKP5XVyj+V1co/ldXKP5XVyj+V3/eA0A/4sJAN+cAwDSqQYAybQHAMK+BgC8zAgAtc0c
12
kr/K/dK/yn1Sv8o9Ur/KPVK/yj1Sv8o9Ur/KPVK/yj/SyYC/0srA/9SKwT/WC4F/1s0CP9dPgv/
13
TJKn/8wS5//Lkuf/y1Ln/8tS5//LUuf/y3deQAAyYYAALySAACxmgAApqAAAJymAACRrAAAhrIA
14
wcAMf8PAC7/FgAr/x8AKf8mACX/LQAj/zQAIP87AR7/QwEb/0sBGf9TARb/XQIU/2oCEv94AhH/
15
FQ5A/FRRQbrT1IJ5k1eDOFLaRDdSXQT2Uh9FtVGhhjSRY4a0EWWHM5EnR3MRKUeykOtH8hDtiDG
16
hf/A/oX/wP6F/8D+hf/A/oX/wP/KiYB/y4jAf8vIgH/LyUB/ywrAf8qNQL/J0EC/yROA/8iWwP/
17
DZlBvQ1cQfxNHsI7zOECe0zjQnrMpQK6TKbCugyogvmMqoL5DKyDOMyuwzhMsgM3zLcDNoy7A3V
18
id2Yf8jd2L/IHdi/x53Yv8ed2L/Hndi/x7/UgAA7FwAANxmAADObQAAxHIAAL10AAC3dAEAsHQO
19
E8AAORXAADVXQAAzGAAAMVgAgDBXgUAul0RALNfIwCsXzMBpl5AA6FcSwedWlQKmVlcDpZYZBGT
20
w0AAPsRAAD7FgAA/B4AAPwmAAD8MAAA/TwAAP5JAAD+WgAA/m0AAP+CAAD/mAAA/6wAAP/AAAD/
21
psAAPqvAAD6wgAA+toAAPrfAAD63wB0rgAAZbYAAFa+AABIxgAAOcsAACvQAAAf1AAAFNoAAA3f
22
wA3APgARAD1AFAA8gBaAO4AYwDsAGsA6QBzAOcAegDlAIAA4wCGAOEAjADfAJMA3QCZANsAoQDZ
23
gDjAP8A4gD/AOAA/wDVAP8AzgD/AMsA/wD/AAYA/wABAP8AAAD/AAQA/wAOAP8AGQD/ACUA/QAy
24
QCSAPcAmQD2AKIA9ACsAPMAuQDxAMsA8ADoAO4A+wDtAP8A7AD/AOEA/wDSAP8AyQD/AMQA/wD/

Return to Bug 53250