Pixi.js: Pixi.js์˜ SVG ์ด๋ฏธ์ง€๊ฐ€ ๋งค์šฐ ํ๋ฆฟํ•˜๊ฒŒ ๋ Œ๋”๋ง๋จ

์— ๋งŒ๋“  2014๋…„ 08์›” 22์ผ  ยท  25์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pixijs/pixi.js

SVG ์ด๋ฏธ์ง€๋กœ pixi.js๋ฅผ ํ…Œ์ŠคํŠธํ–ˆ๋Š”๋ฐ ๋ Œ๋”๋ง์ด ์ข‹์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์‡ผ์ผ€์ด์Šค jsfiddle์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

http://jsfiddle.net/confile/w84y9k7c/

Pixi.js๋กœ ๋” ๋‚˜์€ SVG ๋ Œ๋”๋ง์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๐Ÿ™ Feature Request

๋ชจ๋“  25 ๋Œ“๊ธ€

SVG์ด๊ธฐ ๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋ผ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. WebGL์˜ ํฌ๊ธฐ ์กฐ์ •์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์Œ์ž…๋ฐฉ์ด๋ฉฐ ์บ”๋ฒ„์Šค์—์„œ๋Š” ์„ ํ˜•์ž…๋‹ˆ๋‹ค. ํ๋ฆฟํ•ด์งˆ ๊ฒƒ์ด๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์กฐ์ •ํ•œ ๋‹ค์Œ ๋ Œ๋”๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Pixi.js๋Š” ๋ฒกํ„ฐ ๋ Œ๋”๋Ÿฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๋น„ํŠธ๋งต ๋ Œ๋”๋Ÿฌ์ž…๋‹ˆ๋‹ค. ์ฆ‰, SVG๋ฅผ ๋ Œ๋”๋งํ•ด๋„ png/jpg์— ๋น„ํ•ด ์ด์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

์–˜๋“ค ์•„,

@englercj ๊ฐ€ ๋งž์Šต๋‹ˆ๋‹ค. Pixi๋Š” SVG๋ฅผ ๋กœ๋“œํ•  ๋•Œ ๋ž˜์Šคํ„ฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” svg๋ฅผ ์‹ค์ œ๋กœ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ˆ˜์š”๊ฐ€ ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ๋” ์ž์„ธํžˆ ์กฐ์‚ฌํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

์‚ฌ๋žŒ๋“ค์ด ๋ถ„๋ช…ํžˆ ์›ํ•˜์ง€๋งŒ ์•„์ง ์ด์ •ํ‘œ์— ์˜ฌ๋ฆฌ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋‹ค์‹œ ์—ฝ๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ์ด๋ฅผ ์œ„ํ•œ v3 ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ธฐ๊บผ์ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋จผ์ € ๋งŒ๋“ค ๋‹ค๋ฅธ ๋ฉ‹์ง„ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๊ทธ๊ฒƒ์„ ํ•˜๋„๋ก ์Šน์ธํ•˜์ง€ ์•Š๋Š” ํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

spriteSVG.scale.set(1);์—์„œ์™€ ๊ฐ™์ด ์Šค์ผ€์ผ์„ 1๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. SVG ํŒŒ์ผ์˜ ์ฒซ ๋ฒˆ์งธ ํƒœ๊ทธ๋ฅผ ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค... ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ทฐํฌํŠธ ํฌ๊ธฐ์˜ ๋‘ ๋ฐฐ์ž…๋‹ˆ๋‹ค.

<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 200 200">
๋ Œ๋”๋ง์ด ๋‚ ์นด๋กญ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฃจํ‹ด์„ ์ž‘์„ฑํ•œ ๋‹ค์Œ ๊ฒฐ๊ณผ์—์„œ ํ…์Šค์ฒ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ •๋œ jsfiddle์„ ๊ฒŒ์‹œํ–ˆ์ง€๋งŒ ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ง€๋‚œ ๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ SVG์—์„œ PIXI.Graphics๋กœ์˜ ๋ณ€ํ™˜ ์ž‘์—…์„ ํ–ˆ์œผ๋ฉฐ ๊ฝค ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

https://github.com/saschagehlich/pixi-svg-graphics

์—ฌ๊ธฐ์—์„œ ๋ฐ๋ชจ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
http://filshmedia.net/lab/pixi-svg/
(PIXI.Container๋Š” ์ตœ๋Œ€ 10๋ฐฐ๊นŒ์ง€ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค(์›๋ž˜ SVG๋Š” 80x80๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค). ์—ฌ์ „ํžˆ ๋ฐ”์‚ญํ•ฉ๋‹ˆ๋‹ค.)

์•„์ง ์™„์ „ํžˆ ๊ตฌํ˜„๋˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ๋ช‡ ๊ฐœ์˜ SVG ํŒŒ์ผ๋กœ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์ข‹์€ ์‹œ์ž‘์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ๋ณต์žกํ•œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋Š” ์ง€๊ธˆ์€ ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ ์•ž์œผ๋กœ ๋ฉฐ์น  ์•ˆ์— ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ๋•๊ณ  ์‹ถ๋‹ค๋ฉด - ๋ถ€๋‹ด ์—†์ด ๊ธฐ์—ฌํ•˜์‹ญ์‹œ์˜ค. :)

+1

๊ฒŒ์ž„์˜ ๋งŽ์€ ์ž์‚ฐ์ด ์‹ค์ œ๋กœ ๋งž์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ๊ฐœ๋…์ด ๋ž˜์Šคํ„ฐ์ž…๋‹ˆ๋‹ค.

๋‚ด PIXI-SVG-Graphics ํ”„๋กœ์ ํŠธ๋Š” ์ด์ œ ๋ณต์žกํ•œ ๊ฒฝ๋กœ๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ npm์— ๋ชจ๋“ˆ๋กœ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. https://www.npmjs.com/package/pixi-svg-graphics

์ƒˆ๋กœ์šด ๋ Œ๋” ์—”์ง„์„ ๊ตฌํ˜„ํ•˜๋Š” ๋Œ€์‹  ๋ธŒ๋ผ์šฐ์ € SVG ๋ Œ๋” ์—”์ง„์„ ํ™œ์šฉํ•˜๋Š” ์†”๋ฃจ์…˜์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์•„์ด๋””์–ด๋Š” Sprite(๋ฐ/๋˜๋Š” BaseTexture) "SVGSprite"์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. webGL ๋ Œ๋”๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ svg๊ฐ€ ํ๋ฆฟํ•ด์ง€์ง€ ์•Š๋„๋ก ํ‘œ์‹œ๋œ ํฌ๊ธฐ์˜ ํ…์Šค์ฒ˜๋กœ ๋ Œ๋”๋ง๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„์ด๋””์–ด:

  • webgl ๋ Œ๋”๋Ÿฌ์— ํ•„์š”ํ•œ ์ •ํ™•ํ•œ ํฌ๊ธฐ๋กœ 2d ์บ”๋ฒ„์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • .drawImage(svg_file,0, 0) ์‚ฌ์šฉ; 2D ์บ”๋ฒ„์Šค์—
  • webGL ๋ Œ๋”๋Ÿฌ์˜ ํ…์Šค์ฒ˜๋กœ 2D ์บ”๋ฒ„์Šค ์‚ฌ์šฉ

ํฌ๊ธฐ๋Š” SVGSprite๊ฐ€ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋œ ์ปจํ…Œ์ด๋„ˆ์— ํฌํ•จ๋œ ๊ฒฝ์šฐ์—๋„ ํฌ๊ธฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ณ„์‚ฐ๋˜๋„๋ก ์ „์—ญ ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. SVGSprite์—๋Š” ๊ณ„์‚ฐ ๋ฐ ์†Œ์Šค ์บ”๋ฒ„์Šค๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋˜๋„๋ก ์—…๋ฐ์ดํŠธ ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  SVG ๊ธฐ๋Šฅ์ด pixi์—์„œ ์ž‘๋™ํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ํ๋ฆฟํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@FlorianLudwig ๊ทธ๋ž˜์„œ SVG์˜ ์†์„ฑ์ด mySVG.setAttribute("transform", "scale(50 50)"); ์ฒ˜๋Ÿผ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ ์ด๋ฏธ์ง€์˜ ์บ”๋ฒ„์Šค ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๊ณผ ํ•จ๊ป˜ PIXI.Texture.fromCanvas ์™€ ํ•จ๊ป˜ https://gist.github.com/biovisualize/8187844 ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. mySVG.setAttribute("transform", "scale(50 50)"); ?

@saschagehlich

๋‚ด PIXI-SVG-Graphics ํ”„๋กœ์ ํŠธ๋Š” ์ด์ œ ๋ณต์žกํ•œ ๊ฒฝ๋กœ๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์ธ ๊ฒƒ๋“ค์ด ์•„์ง ๋ถ€์กฑํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ?

์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ

    var canvas = document.createElement ('canvas');
    canvas.width = ...; canvas.height = ...;
    canvas.getContext ('2d').drawImage (svgImage, 0, 0, canvas.width, canvas.height);

    var sprite = new PIXI.Sprite (new PIXI.Texture (new PIXI.BaseTexture (canvas)));

svg๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ํ•ด์ƒ๋„๋กœ ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ™•์žฅํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ œ์™ธํ•˜๊ณ  svg ํƒœ๊ทธ์— preserveAspectRatio="none" ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•จ).

์ด ๋ฌธ์ œ๋ฅผ "+1"ํ•˜๋ ค๋ฉด GitHub ๋ฐ˜์‘์„ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ณธ ๊ฒŒ์‹œ๋ฌผ์„ +1ํ•˜์„ธ์š”. ์ด ์Šค๋ ˆ๋“œ์—์„œ "+1" ๋ฉ”์‹œ์ง€๋Š” ์†Œ์Œ์ผ ๋ฟ์ด๋ฉฐ ์—ฌ๊ธฐ์—์„œ ๋Œ€ํ™”๋ฅผ ์ฝ์„ ์ˆ˜ ์—†๋„๋ก ํ•˜๋ฏ€๋กœ ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ํ…์Šค์ฒ˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„ค ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด svg์˜ ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

new PIXI.Texture.fromImage('bunny.svg', undefined, undefined, 2.0);

๋‚˜๋Š” bunnymark๋ฅผ ํฌํฌํ–ˆ๊ณ  ์—ฌ๊ธฐ์—์„œ JS์—์„œ ๋ผ์ธ 66์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์Šค์ผ€์ผ์„ ๊ฐ€์ง€๊ณ  ๋†€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
http://codepen.io/anon/pen/pyXMzR.

@englercj , ๊ดœ์ฐฎ์œผ๋ฉด PR์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/RanzQ/pixi.js/commit/07522e6dddcdb4741e196ad5f20bb8e534fbb59e

์ด๋Ÿฐ ์‹์œผ๋กœ ์ฐฝ ํฌ๊ธฐ ์กฐ์ • ์‹œ ํ…์Šค์ฒ˜๋ฅผ ์กฐ์ •ํ•˜๊ณ  ๋‹ค์‹œ ๋ž˜์Šคํ„ฐํ™”ํ•˜์—ฌ ์žฅ๋ฉด์ด ์‘๋‹ตํ•˜๊ณ  pixi๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ์„ ๊ณ„์† ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PR ๋ณ‘ํ•ฉ, ๋‹ซ์Šต๋‹ˆ๋‹ค!

Chrome ๋ฐ FF์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ IE11์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ ์ค„์—์„œ SecurityError๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

let tiger = new Sprite(new PIXI.Texture.fromImage('images/tiger.svg', true, PIXI.SCALE_MODES.LINEAR, 8.0)); 

image

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์•„, ์ข‹์€ OL' SecurityError. Edge์—์„œ๋Š” ์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ IE11์—์„œ๋Š” ์ˆ˜์ •๋˜์ง€ ์•Š์€ IE11์˜ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.

https://github.com/pixijs/pixi.js/issues/2928

SVG๋ฅผ PNG๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.

์•Œ์•„ ๋‘˜๋งŒ ํ•œ. ํžŒํŠธ๋ฅผ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ค์ „ 14.12.2017 08:10 schrieb "Sascha Gehlich" [email protected] :

์•„, ์ข‹์€ OL' SecurityError. IE11์—์„œ ์ˆ˜์ •๋œ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.
Edge, ํ•˜์ง€๋งŒ IE11์—๋Š” ์—†์Œ:

2928 https://github.com/pixijs/pixi.js/issues/2928

SVG๋ฅผ PNG๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธ
https://github.com/pixijs/pixi.js/issues/936#issuecomment-351627238 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์Šค๋ ˆ๋“œ
https://github.com/notifications/unsubscribe-auth/AAu1ZuPEIl_MUskNn1grboYcBl6Vxdxlks5tAMnfgaJpZM4CaLFV
.

์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ SVG ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด PIXI.Texture.fromImage๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์Šค๋งˆํŠธํฐ์—์„œ๋Š” SVG๊ฐ€ ํ๋ฆฟํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์ƒ˜ํ”Œ ์ฝ”๋“œ https://codepen.io/anon/pen/QaxqvP
๋ฐ์Šคํฌํƒ‘ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๊ดœ์ฐฎ์•„ ๋ณด์ด์ง€๋งŒ ์Šค๋งˆํŠธํฐ์ด๋‚˜ ์•ˆ๋“œ๋กœ์ด๋“œ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜๋ฉด SVG๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.
https://imgur.com/VbXlypP (์™ผ์ชฝ ์ด๋ฏธ์ง€๋Š” PIXI-SVG, ์˜ค๋ฅธ์ชฝ์€ html img ํƒœ๊ทธ).

์•„๋งˆ๋„ devicePixelRatio์™€ ๊ด€๋ จ๋œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์— ๋งž๊ฒŒ "ํ™•๋Œ€"ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฐ์Šคํฌํƒ‘์—์„œ ํ™•๋Œ€ํ•˜๋ฉด ๋™์ผํ•œ ๋™์ž‘์„ ์—๋ฎฌ๋ ˆ์ดํŠธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
ํ”ฝ์…€ ๋น„์œจ์ด 1๋ณด๋‹ค ํฐ ์žฅ์น˜์—์„œ SVG๋ฅผ ํ‘œ์‹œ/ํฌ๊ธฐ ์กฐ์ •ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํ๋ฆฟํ•˜๊ฒŒ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฐ์ƒท์€ iPhone X์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
455a3a2c-f327-43d8-9eba-aabf2492c707

์Šคํฌ๋ฆฐ์ƒท์„ ํ™•๋Œ€ํ•˜๋ฉด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋‚˜๋ณด๋‹ค ๋œ ํ๋ฆฟํ•˜์ง€๋งŒ ํ๋ฆฟํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์˜ˆ๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์–ด๋–ค ์ด์œ ์—์„œ์ธ์ง€,

let texture = new PIXI.Texture.fromImage('../assets/heart.svg', false, undefined, 2);

๋˜์ง€๋‹ค

ERROR Error: The SVG image must have width and height defined (in pixels), canvas API needs them.

์ด๋ฏธ์ง€๋ฅผ ๋จผ์ € ๋กœ๋“œํ•˜๋ฉด

PIXI.loader.add("../assets/heart.svg").load(...)

์˜ค๋ฅ˜๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ new PIXI.Texture.fromImage ์˜ ํ…์Šค์ฒ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋ Œ๋”๋ง๋œ ์Šคํ”„๋ผ์ดํŠธ๊ฐ€ ๋ชจ๋‘ ํ”ฝ์…€ํ™”๋˜์–ด SVG๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ Œ๋”๋ง๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ sourceScale ๋ณ€๊ฒฝํ•ด๋„ ํšจ๊ณผ๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ 1

๊ทธ๋ž˜์„œ sourceScale ๋Š” ํ…์Šค์ฒ˜๊ฐ€ ๋กœ๋”๋กœ ๋กœ๋“œ๋  ๋•Œ ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค(https://github.com/pixijs/pixi.js/issues/4543). ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ์—ฐ๊ตฌ๋ฅผ ๊ณ„์†ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ 2

๋‚ด svg์˜ ๋„ˆ๋น„์™€ ๋†’์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. <svg width="38.148697mm" height="32.77169mm" ...> . ์น˜์ˆ˜๊ฐ€ "mm"๋กœ ์ง€์ •๋˜๋ฉด PIXI์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. "mm"๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@maximedupre ๋Š” ๋ธŒ๋ผ์šฐ์ € ์ œํ•œ์œผ๋กœ ์ธํ•ด px ๊ฐ’๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ svgs๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ๋Š” ๋‹ซํžŒ ํ›„ ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰