Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SVG cannot load the image link & font CSS #2367

Open
1 task done
tuanha1305 opened this issue Mar 26, 2024 · 1 comment
Open
1 task done

SVG cannot load the image link & font CSS #2367

tuanha1305 opened this issue Mar 26, 2024 · 1 comment

Comments

@tuanha1305
Copy link

tuanha1305 commented Mar 26, 2024

Issue or Feature

I'm having some issues when rendering an SVG file to PNG:

  • The style font doesn't support loading from a CSS font:

    <style type="text/css">
      @import url(https://d1wgzwi9vgtgm8.cloudfront.net/88/storage/personalizedDesign/fonts/SVN-Aptima/SVN-Aptima.css)
    </style>
  • If I register the font file path, it works: registerFont()

  • The image link doesn't support loading from a URL:

    <image width="5800" height="6000" xlink:href="https://blog.lubans.org/media/2/20190710-black-white-hat.jpg" />

Steps to Reproduce

const file = await fs.readFile(join(__dirname, 'input.svg'))
    const image = new Image();
    image.src = file;
    
    
    const canvas = createCanvas(7800, 10000);
    const ctx = canvas.getContext('2d');

    ctx.drawImage(image, 0, 0);

    const buffer = canvas.toBuffer('image/png');

    fs.writeFileSync('output.png', buffer);
// etc.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" focusable="false" xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 7800 10000">
    <defs>
        <mask id="image-mask">
            <image width="5800" height="6000" xlink:href="https://blog.lubans.org/media/2/20190710-black-white-hat.jpg" />
        </mask>
        <clipPath id="mask-DJPBK66022650f2045">
            <rect data-key="fOpKfO1934064411" data-layer="New_object__2" x="-1.5534973144531"
                y="0.057674400508404" width="7802.2143554688" height="10000.547851562" fill="none" />
        </clipPath>
        <clipPath id="mask-7XS1B66022650f206e">
            <rect data-key="fOpKfO1934064411" data-layer="New_object__2" x="-1.5534973144531"
                y="0.057674400508404" width="7802.2143554688" height="10000.547851562" fill="none" />
        </clipPath>
        <clipPath id="mask-Z8sVjm0077948007">
            <ellipse data-icon="circle" cx="585.582343164846" cy="596.6756787258979"
                rx="538.2018569814081" ry="543.367133250304" data-object="lW6plv1224437401"
                data-type="ellipse" fill="rgb(0, 0, 0)" stroke="none"
                stroke-width="31.94800087325349"></ellipse>
        </clipPath>
        <filter id="filter-BGG3V66022650f2079" color-interpolation-filters="sRGB">
            <feColorMatrix type="matrix" in="SourceGraphic" result="sepia-filter"
                values="0.39 0.769 0.189 0 0 0.349 0.686 0.168 0 0 0.272 0.534 0.131 0 0 0 0 0 1 0" />
            <feComponentTransfer in="sepia-filter" result="contrast-filter">
                <feFuncR type="linear" slope="1.25" intercept="-0.125" />
                <feFuncG type="linear" slope="1.25" intercept="-0.125" />
                <feFuncB type="linear" slope="1.25" intercept="-0.125" />
            </feComponentTransfer>
        </filter>
        <clipPath id="clip-path-EtTWAG1161026631-e982eedf448723ccfa2e2183c1c5b569">
            <rect data-key="" data-layer="" x="380.27548217773" y="415.0224609375"
                width="6990.7739257812" height="8539.1787109375" fill="#b8cce4" />
        </clipPath>
        <pattern id="pattern-QzpbxR8185504268-fb8bc777542a542affe27c6c240e9060"
            width="12038.18359375" height="12038.18359375" patternUnits="userSpaceOnUse"
            patternContentUnits="objectBoundingBox"
            patternTransform="translate(-1882.4877929688, -1310.8095703125)">
            <image
                xlink:href="https://ik.imagekit.io/7brsfmbfdcw/88/storage/personalizedDesign/starmap/202403/8321b1fd866f65c49fb2ffe4d72f5c76.preview.png"
                width="1" height="1" preserveAspectRatio="xMidYMid slice"></image>
        </pattern>
        <filter id="filter-vBwZd33133131911-filter">
            <feMorphology in="SourceAlpha" result="OUTLINE_DILATED" operator="dilate" radius="50"></feMorphology>
            <feFlood flood-color="rgb(255, 255, 255)" flood-opacity="1" result="OUTLINE_COLOR"></feFlood>
            <feComposite in="OUTLINE_COLOR" in2="OUTLINE_DILATED" operator="in" result="OUTLINE"></feComposite>
            <feMerge>
                <feMergeNode in="OUTLINE"></feMergeNode>
                <feMergeNode in="SourceGraphic"></feMergeNode>
            </feMerge>
        </filter>
        <style type="text/css">
            @import
            url(https://d1wgzwi9vgtgm8.cloudfront.net/88/storage/personalizedDesign/fonts/SVN-Aptima/SVN-Aptima.css)</style>
        <filter id="filter-FCYkp68311113180-filter">
            <feMorphology in="SourceAlpha" result="OUTLINE_DILATED" operator="dilate" radius="100"></feMorphology>
            <feFlood flood-color="rgb(255, 255, 255)" flood-opacity="1" result="OUTLINE_COLOR"></feFlood>
            <feComposite in="OUTLINE_COLOR" in2="OUTLINE_DILATED" operator="in" result="OUTLINE"></feComposite>
            <feMerge>
                <feMergeNode in="OUTLINE"></feMergeNode>
                <feMergeNode in="SourceGraphic"></feMergeNode>
            </feMerge>
        </filter>
        <style type="text/css">
            @import
            url(https://d1wgzwi9vgtgm8.cloudfront.net/88/storage/personalizedDesign/fonts/samantha_upright/samantha_upright.css)</style>
        <style type="text/css">
            @import
            url(https://d1wgzwi9vgtgm8.cloudfront.net/88/storage/personalizedDesign/fonts/yellowtail/yellowtail.css)</style>
        <filter id="filter-I1Fdxn9173717771-filter">
            <feMorphology in="SourceAlpha" result="OUTLINE_DILATED" operator="dilate" radius="100"></feMorphology>
            <feFlood flood-color="rgb(227, 108, 9)" flood-opacity="1" result="OUTLINE_COLOR"></feFlood>
            <feComposite in="OUTLINE_COLOR" in2="OUTLINE_DILATED" operator="in" result="OUTLINE"></feComposite>
            <feMerge>
                <feMergeNode in="OUTLINE"></feMergeNode>
                <feMergeNode in="SourceGraphic"></feMergeNode>
            </feMerge>
        </filter>
        <style type="text/css">
            @import
            url(https://d1wgzwi9vgtgm8.cloudfront.net/88/storage/personalizedDesign/fonts/Dancing_Script_OT/Dancing_Script_OT.css)</style>
        <clipPath id="mask-X8Y6K660226516cdbb">
            <ellipse data-key="sAth5d3585431313" data-layer="Uploader_Test_Filter"
                cx="3863.4694824219" cy="7907.4692382812" rx="1148.2885742188" ry="1148.2885742188"
                fill="none" />
        </clipPath>
        <clipPath id="mask-VD283660226516cdd5">
            <ellipse data-key="sAth5d3585431313" data-layer="Uploader_Test_Filter"
                cx="3863.4694824219" cy="7907.4692382812" rx="1148.2885742188" ry="1148.2885742188"
                fill="none" />
        </clipPath>
        <filter id="filter-5H1UK660226516cddd" color-interpolation-filters="sRGB">
            <feColorMatrix type="matrix" in="SourceGraphic" result="bw-filter"
                values="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0" />
            <feComponentTransfer in="bw-filter" result="contrast-filter">
                <feFuncR type="linear" slope="1.5" intercept="-0.25" />
                <feFuncG type="linear" slope="1.5" intercept="-0.25" />
                <feFuncB type="linear" slope="1.5" intercept="-0.25" />
            </feComponentTransfer>
        </filter>
    </defs>
    <g data-document="design2d">
        <g clip-path="url(#mask-7XS1B66022650f206e)">
            <g transform="translate(-1.5534973144509 -12526.167238625) scale(86.483043930737)"
                data-image-uploader-key="fOpKfO1934064411">
                <rect x="0" y="0" width="400" height="400" opacity="0" data-role="image-placeholder"></rect>
                <image
                    xlink:href="https://ik.imagekit.io/7brsfmbfdcw/88/storage/personalizedDesign/customer_uploaded/20240314/L5Q1965f3acde9cd3e.thumb.jpg"
                    x="0" y="0" width="346" height="400" data-customer-uploaded="1"
                    filter="url(#filter-BGG3V66022650f2079)" />
            </g>
        </g>
        <image
            xlink:href="https://ik.imagekit.io/7brsfmbfdcw/88/storage/personalizedDesign/design/images/14.03.2024/1.7TMTV65f3ab86b52c1.preview.jpg"
            data-key="lMfL7a6614161699" data-layer="New_object__3" width="5647" height="3770"
            mask="url(#image-mask)"
            transform="translate(374.87768554688 419.95434570312) scale(1.2389601918054 2.2637260133455)" />
        <g data-key="QzpbxR8185504268" data-layer="STARMAP">
            <ellipse data-key="EtTWAG1161026631" data-layer="Map_Holder" cx="4136.6040039062"
                cy="4708.2822265625" rx="6019.091796875" ry="6019.091796875"
                fill="url(#pattern-QzpbxR8185504268-fb8bc777542a542affe27c6c240e9060)"
                clip-path="url(#clip-path-EtTWAG1161026631-e982eedf448723ccfa2e2183c1c5b569)" />
            <g data-starmap="QzpbxR8185504268" x="-1882.4877929688" y="-1310.8095703125"
                width="12038.18359375" height="12038.18359375"
                clip-path="url(#clip-path-EtTWAG1161026631-e982eedf448723ccfa2e2183c1c5b569)"></g>
            <text data-key="vBwZd33133131911" data-layer="Location"
                font-family="&#039;SVN-Aptima&#039;" font-size="800" font-weight="bold"
                font-style="italic" letter-spacing="0" word-spacing="0" text-anchor="middle"
                filter="url(#filter-vBwZd33133131911-filter)" fill="#205867" y="2593.6466064453"
                dominant-baseline="baseline">
                <tspan x="3975.3687744141" dy="0em" alignment-baseline="baseline">New York</tspan>
            </text>
            <text data-key="FCYkp68311113180" data-layer="LatLng"
                font-family="&#039;Samantha Upright&#039;" font-size="700" font-weight="bold"
                font-style="normal" letter-spacing="0" word-spacing="0" text-anchor="middle"
                filter="url(#filter-FCYkp68311113180-filter)" fill="#e36c09" y="5227.1245117188"
                dominant-baseline="baseline">
                <tspan x="3991.3588867188" dy="0em" alignment-baseline="baseline">40°42&#039;45&quot;
                    N 74°0&#039;21&quot; W</tspan>
            </text>
            <text data-key="vSWzxc3191115515" data-layer="Date" font-family="&#039;Yellowtail&#039;"
                font-size="700" font-weight="normal" font-style="normal" letter-spacing="0"
                word-spacing="0" text-anchor="middle" fill="#ffffff" y="3900.9979248047"
                dominant-baseline="baseline">
                <tspan x="4010.6066894531" dy="0em" alignment-baseline="baseline">March 26, 2024,
                    08:30</tspan>
            </text>
        </g>
        <text data-key="I1Fdxn9173717771" data-layer="Test_Fonts"
            font-family="&#039;Dancing Script OT&#039;" font-size="600" font-weight="normal"
            font-style="normal" letter-spacing="0" word-spacing="0" text-anchor="middle"
            filter="url(#filter-I1Fdxn9173717771-filter)" fill="#eeece1" y="1281"
            dominant-baseline="baseline">
            <tspan x="3948" dy="0em" alignment-baseline="baseline">Title here</tspan>
        </text>
        <img
            href="https://ik.imagekit.io/7brsfmbfdcw/88/storage/personalizedDesign/design/images/14.03.2024/1.57FT165f3abeaed2ae.preview.jpg"
            data-key="Z8sVjm0077948007" data-layer="Mask_by_ellipse" width="1152" height="1152"
            clip-path="url(#mask-Z8sVjm0077948007)"
            transform="translate(1865.3439941406 5806.0405273438) scale(3.4429168701172 3.4983819325765)" />
        <g clip-path="url(#mask-VD283660226516cdd5)">
            <g transform="translate(2715.1809082031 6376.4178059896) scale(7.6552571614583)"
                data-image-uploader-key="sAth5d3585431313">
                <rect x="0" y="0" width="400" height="400" opacity="0" data-role="image-placeholder"></rect>
                <image
                    xlink:href="https://ik.imagekit.io/7brsfmbfdcw/88/storage/personalizedDesign/customer_uploaded/20240325/8Q8RI6602256375aaa.thumb.jpg"
                    x="0" y="0" width="300" height="400" data-customer-uploaded="1"
                    filter="url(#filter-5H1UK660226516cddd)" />
            </g>
        </g>
    </g>
    <g data-svg-uploader-group="1" style="display: none">
        <g clip-path="url(#mask-DJPBK66022650f2045)">
            <g transform="translate(-1.5534973144531 0.057674400508404) scale(1)"
                data-image-uploader-key="fOpKfO1934064411">
                <rect x="0" y="0" width="10000.547851562" height="10000.547851562" opacity="0"
                    data-role="image-placeholder"></rect>

            </g>
        </g>
        <g clip-path="url(#mask-X8Y6K660226516cdbb)">
            <g transform="translate(2715.1809082031 6759.1806640625) scale(1)"
                data-image-uploader-key="sAth5d3585431313">
                <rect x="0" y="0" width="2296.5771484375" height="2296.5771484375" opacity="0"
                    data-role="image-placeholder"></rect>

            </g>
        </g>
    </g>
</svg>

Your Environment

  • Version of node-canvas: canvas@2.11.2
  • Environment: macOS 14.2.1
@tuanha1305
Copy link
Author

@zbjornson Can you help me? Please

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant