Форма вспышки, нарисованная на холсте, выглядит очень пикселизированной (с псевдонимами)

#javascript #html #canvas

#javascript #HTML #холст

Вопрос:

Я пытаюсь создать эффект «starburst», используя canvas, но линии сегмента выглядят невероятно пикселизированными. Я делаю что-то не так?

 var rays = 40;
var canvas = $("header canvas")[0];
var ctx = canvas.getContext("2d");

var centre = [canvas.width*0.2,canvas.height*0.90];
var radius = Math.sqrt(Math.pow(canvas.width,2) Math.pow(canvas.height,2));
var colours = ["red","white"];

var segment = 2*Math.PI/rays;

for(var i=0;i<rays;i  ){
    ctx.beginPath();
    ctx.moveTo(centre[0], centre[1]);
    ctx.arc(
        centre[0], 
        centre[1],
        radius,
        segment * i,
        segment * (i 1),
        false
    );
    ctx.lineTo(centre[0], centre[1]);
    ctx.closePath();
    ctx.fillStyle = colours[i % colours.length];
    ctx.fill();
}
  

Комментарии:

1. Каков размер холста? Мне это кажется довольно приятным. P.S. результат нравится.

2. В каких браузерах вы это пробуете? Я знаю, что webkit обычно использует псевдонимы по умолчанию.

Ответ №1:

Я бы предложил использовать векторную графику (т. Е. SVG) вместо canvas. Это устранит ваши проблемы с неровными линиями.

Более конкретно, если вы используете библиотеку Javascript Raphael, ваш код может быть практически таким же.

Дополнительным бонусом является то, что Raphael также работает в более старых версиях IE, поскольку он может обнаруживать и переключаться на использование VML, если SVG недоступен.

Ответ №2:

Сглаживание выполняется браузером. Прямо сейчас ваш код будет отлично смотреться в Firefox 4 и IE9, но плохо в браузерах webkit.

В том, как chrome / safari делают это, вот так, есть плюсы, которые будут хорошо смотреться в chrome, но плохо в Firefox 4.

Люди попросили автора спецификации использовать логическое значение, управляющее сглаживанием, и он был против этой идеи.

Комментарии:

1. да, только что попробовал в последней версии Chrome 10.0.648.205, все выглядит нормально.

2. Алнитак, эта скрипка в Chrome 12 выглядит ужасно по сравнению с FF4. Слева = Firefox, справа = Chrome: i.imgur.com/MqvTa.png

3. странно — это идеально подходит для Chrome 10 и macOS X.