Tun Sie es eher für Spaß als echte Hilfe. Aber Sie können Grundidee, lesen Sie weiter :)
Bitmap erstellen, erhalten pure Farbfeld (zum Beispiel imageData), Breite des Bildes erhalten und multiplizieren Sie es mit 4 ([r, g, b, a] ist ein Pixel)()
Wenn Sie wollen - Sie können es ändern, indem Sie einige "put data" Schleifen und Multipy Richtung um 15 machen, um diese "blocky" Stil zu bekommen!
Dann - tun, was Sie wollen. Ich werde zum Beispiel Zweck tun:
const channelResolution = 4; // if you don't have somehow alpha channel - make it 3.
const lineDistance = imageWidth * channelResolution;
const imageData = [ /* your ImageData from canvas */];
const [r, g, b, a] = [0, 1, 2, 3]; // directions inside channels
const [left, right, up, down] = [
-channelResolution,
channelResolution,
-lineDistance,
lineDistance]; // directions inside pixels
// return array of channel values in given directions
const scan = (data, scanChannel, scanPixel, scanDirections) => {
const scanResult = [];
scanResult.push(data[scanPixel + scanChannel]);
return scanResult.concat(scanDirections.map(direction => {
return data[scanPixel + scanChannel + direction];
}));
};
// mixer filter
const mixChannel = (array) => {
let sum = 0;
array.map(channel => sum+=channel);
return sum/(array.length + 1);
};
// blur edge filter/shader
const blurEdges =() => {
const resultData = clone(imageData); // (you can do json transformation)
for(let pointer = 0; pointer < imageData * channelResolution - channelResolution; pointer += channelResolution) {
const [red, green, blue, alpha] = [
mixChannel(scan(imageData, r, pointer, [up, left, down, right])),
mixChannel(scan(imageData, g, pointer, [up, left, down, right])),
mixChannel(scan(imageData, b, pointer, [up, left, down, right])),
mixChannel(scan(imageData, a, pointer, [up, left, down, right])),
];
resultData[pointer + r] = red;
resultData[pointer + g] = green;
resultData[pointer + b] = blue;
resultData[pointer + a] = alpha;
}
return resultData; // or putImageData
}
Könnten Sie einige der Code teilen? Sind die Linien transparent? Warum können Sie die Zellengröße nicht größer definieren? – K3N
@ K3N dies sind nur ein paar Rechtecke, die ich mit 'ctx.fillRect' Funktion erstellt habe und nein kann ich nicht. Diese sind die Ausgabe einer anderen Komponente und unmöglich zu ändern. –
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/filter + https://developer.mozilla.org/en-US/docs/Web/CSS/filter#blur() – Prinzhorn