#html5-canvas
Вопрос:
Я хотел бы создать определенный визуальный эффект, взяв изображение на холсте HTML5, уменьшив его масштаб, а затем изменив его размер до исходного. Я хочу, чтобы конечное изображение, по сути, выглядело намного более низкого качества, либо пиксельным, либо слегка размытым, в зависимости от того, какой тип защиты используется. Эта картинка-тот эффект, который я хочу (создается в photoshop путем уменьшения масштаба, а затем увеличения).
Я пытался жонглировать несколькими вложенными полотнами, используя шаблоны или масштаб, но не совсем понял, как этого достичь.
Любые предложения будут только приветствоваться 🙂
Ответ №1:
ну, вы можете применить изображение к холсту, а затем получить растровое изображение и делать все, что захотите:
c.drawImage(img,0,0) data = c.getImageData(0,0,img.width, img.height).data pixels = []; for(px = 0; px lt; data.length; px =4){ pixels.push([data[i], data[i 1], data[i 2], data[i 3]]) } // suppose you want to scale 1:2 scaled = [] for(px = 0; px lt; pixels.length; px ){ if(px % 2){ scaled.push(pixels[px]) } } // scaled contains the alternate pixels (first yes, second no, third no...) c.putImageData(scaled, 0, 0); // go back to the original size with the scaled original_scaled = [] scaled = [] for(px = 0; px lt; scaled.length; px ){ if(px % 2){ original_scaled.push(pixels[px]) original_scaled.push(pixels[px]) } } c.putImageData(original_scaled, 0, 0);
это делается с помощью масштабирования… однако я не думаю, что это правильный путь… вероятно, используя маску, вы добьетесь лучшего результата, например, используя среднее значение соседних пикселей
Комментарии:
1. спасибо, у вас есть какие-либо идеи о том, как маска усреднения, подобная той, которую вы упомянули, может быть реализована на холсте?
2. кроме того, я прав, думая, что созданный массив «масштабируется» должен быть типом данных изображения (а не просто массивом), и поэтому его нужно будет сделать с заданными шириной и высотой….. это вызывает у меня некоторые сложные проблемы, когда размеры исходного изображения не могут быть легко разделены по коэффициенту масштабирования.
3. @awnine дай мне немного времени, чтобы попробовать это на моем локальном компьютере, и я сейчас вернусь