节点js中的像素化图像
Pixelate image in node js
我现在正在做的是,我使用 var getPixels = require("get-pixels")
获取所有像素,然后我使用以下代码遍历像素数组:
var pixelation = 10;
var imageData = ctx.getImageData(0, 0, img.width, img.height);
var data = imageData.data;
for(var y = 0; y < sourceHeight; y += pixelation) {
for(var x = 0; x < sourceWidth; x += pixelation) {
var red = data[((sourceWidth * y) + x) * 4];
var green = data[((sourceWidth * y) + x) * 4 + 1];
var blue = data[((sourceWidth * y) + x) * 4 + 2];
//Assign
for(var n = 0; n < pixelation; n++) {
for(var m = 0; m < pixelation; m++) {
if(x + m < sourceWidth) {
data[((sourceWidth * (y + n)) + (x + m)) * 4] = red;
data[((sourceWidth * (y + n)) + (x + m)) * 4 + 1] = green;
data[((sourceWidth * (y + n)) + (x + m)) * 4 + 2] = blue;
}
}
}
}
}
此方法的问题是结果图像太锐利。
我要找的是类似于这个用 ImageMagick -sale 完成的东西
我在第二个命令中使用的命令是
convert -normalize -scale 10% -scale 1000% base.jpg base2.jpg
这种方法的问题是我不知道如何指定实际的像素大小。
那么是否有可能通过 for
循环获得第二个结果。或者最好使用 imagemagick -scale 但如果有人可以帮助计算数学,那么我可以得到实际的像素大小会很棒。
按照您编写的方式,图像被处理成大小为 nxn
的像素,其中 n
由您的 pixelation
变量指定。增加 pixelation
将提供所需的 "coarseness".
不确定您遇到的数学问题,但如果我们从这样的 600x600 图片开始:
然后,如果您希望最终图像只有 5 个块状像素,页面下方有 5 个块状像素,您可以将其缩小到 5x5,然后再将其放大到原始大小:
convert start.png -scale 5x5 -scale 600x600 result.png
或者,如果您想使用 10x10 块状像素:
convert start.png -scale 10x10 -scale 600x600 result2.png
我现在正在做的是,我使用 var getPixels = require("get-pixels")
获取所有像素,然后我使用以下代码遍历像素数组:
var pixelation = 10;
var imageData = ctx.getImageData(0, 0, img.width, img.height);
var data = imageData.data;
for(var y = 0; y < sourceHeight; y += pixelation) {
for(var x = 0; x < sourceWidth; x += pixelation) {
var red = data[((sourceWidth * y) + x) * 4];
var green = data[((sourceWidth * y) + x) * 4 + 1];
var blue = data[((sourceWidth * y) + x) * 4 + 2];
//Assign
for(var n = 0; n < pixelation; n++) {
for(var m = 0; m < pixelation; m++) {
if(x + m < sourceWidth) {
data[((sourceWidth * (y + n)) + (x + m)) * 4] = red;
data[((sourceWidth * (y + n)) + (x + m)) * 4 + 1] = green;
data[((sourceWidth * (y + n)) + (x + m)) * 4 + 2] = blue;
}
}
}
}
}
此方法的问题是结果图像太锐利。
我要找的是类似于这个用 ImageMagick -sale 完成的东西
我在第二个命令中使用的命令是
convert -normalize -scale 10% -scale 1000% base.jpg base2.jpg
这种方法的问题是我不知道如何指定实际的像素大小。
那么是否有可能通过 for
循环获得第二个结果。或者最好使用 imagemagick -scale 但如果有人可以帮助计算数学,那么我可以得到实际的像素大小会很棒。
按照您编写的方式,图像被处理成大小为 nxn
的像素,其中 n
由您的 pixelation
变量指定。增加 pixelation
将提供所需的 "coarseness".
不确定您遇到的数学问题,但如果我们从这样的 600x600 图片开始:
然后,如果您希望最终图像只有 5 个块状像素,页面下方有 5 个块状像素,您可以将其缩小到 5x5,然后再将其放大到原始大小:
convert start.png -scale 5x5 -scale 600x600 result.png
或者,如果您想使用 10x10 块状像素:
convert start.png -scale 10x10 -scale 600x600 result2.png