【问题标题】:Blurry SVG in pixijspixjs 中的模糊 SVG
【发布时间】:2018-07-11 05:21:48
【问题描述】:

我正在尝试使用 PIXIJs 库来显示 SVG 图像,但在智能手机上 SVG 似乎很模糊。

Here is a sample code

    var $ = window.jQuery;
    var PIXI = window.PIXI;

    $(document).ready(onReady);


    var devicePixelRatio;
    var width =800;
    var height=600;

    var scale = 5;
    var renderer;
    var stage;

    var canvas;

    function onReady() {
        devicePixelRatio = $(window).devicePixelRatio;


        canvas = window.document.createElement("canvas");
        canvas.style.width = width + "px";
        canvas.style.height = height + "px";

        var container = document.getElementById("container");
        container.appendChild(canvas);

        var svgimgtag = document.getElementById("svgimgtag");

        svgimgtag.style.top = 160 + "px";
        svgimgtag.style.left = 500 + "px";
        svgimgtag.style.width = 64 * scale + "px";
        svgimgtag.style.height = 64 * scale + "px";
        svgimgtag.src = 'https://rawgit.com/dentez/848fe2b6a8da7b3a78bacded90bd4f61/raw/89bb179753df9ee3e8b62d8c7a0c7620b6db144e/bee.svg';


        renderer = PIXI.autoDetectRenderer(width , height , {
            backgroundColor: 0xFFFFFF,
            view: canvas,
            resolution: devicePixelRatio
        });

        stage = new PIXI.Stage(0xFFFFFF);

        document.body.appendChild(renderer.view);
        renderer.view.style.position = 'absolute';

        requestAnimationFrame(update);

        beeTexture = new PIXI.Texture.fromImage('https://rawgit.com/dentez/848fe2b6a8da7b3a78bacded90bd4f61/raw/89bb179753df9ee3e8b62d8c7a0c7620b6db144e/bee.svg', undefined, undefined, scale);

        var bee = new PIXI.Sprite(beeTexture);


        bee.anchor.x = 0.5;
        bee.anchor.y = 1;
        bee.position.x = 400;
        bee.position.y = 300;
        //bunny.scale.set(1);
        stage.addChild(bee);
        renderer.resize(width, height);
    }


    function update() {

        renderer.render(stage);
        requestAnimationFrame(update);
    }

在桌面浏览器上似乎没问题,但是当我在智能手机或安卓模拟器上尝试时,SVG 呈现如下:

(左图为PIXI-SVG;右图为html img标签)。

也许它与 devicePixelRatio 有关,似乎浏览器“放大”以适应屏幕 - 因为在桌面上如果我放大我可以模拟相同的行为。 我究竟做错了什么?显示/缩放 SVG 的正确方法是什么?

【问题讨论】:

    标签: javascript android canvas svg pixi.js


    【解决方案1】:

    这是因为 PIXI 将 SVG 栅格化为纹理,根据这一行中 SVG 图像的大小(64x64):

    beeTexture = new PIXI.Texture.fromImage
    

    然后它被缩放,而且,不出所料,这看起来很模糊。

    您可以向 fromImage 提供 sourceScale 参数以在更大的比例上对其进行栅格化。或者尝试使用 PIXI 的第三方库之一将 SVG 渲染为矢量。谷歌返回了这个,但它看起来不像是非常积极地维护: https://github.com/bigtimebuddy/pixi-svg

    更多信息请参见此处的讨论: https://github.com/pixijs/pixi.js/issues/936

    【讨论】:

    • 在那次讨论中提到你需要在你的svg上widthheight。这对我来说改变了游戏规则。只有viewBox 不行,所以你需要<svg width="800" height="800" viewBox="0 0 800 800">
    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 2015-03-11
    • 2017-01-20
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多