我想刪除一個垂直線,寬度爲10像素,圖像的高度。我正在使用畫布。 我無法發佈這jsfiddle因爲我無法加載圖像。刪除像素的垂直線
var canvas = document.createElement("canvas");
canvas.height = 200;
canvas.width = 200;
Caman(canvas, "studipo.jpg", function() {
var base64encoded = GetResizedImage(canvas, 200, 200, 200, 160);
});
function GetResizedImage(canvas, width, height, croppingWidth, croppingheight) {
var ctx = canvas.getContext("2d");
var oldid = ctx.getImageData(0, 0, width, height);
var newCanvas = document.createElement("canvas");
newCanvas.width = croppingWidth;
newCanvas.height = croppingheight;
var newContext2d = newCanvas.getContext("2d");
var vnewid = newContext2d.createImageData(width, height);
var oldArray = Array.from(oldid.data);
console.log(oldArray);
var arrayToInsert = [];
for (var y = 0; y < height; ++y) {
for (var x = 0; x < width; ++x) {
if (y > 90 && y < 130) { // this is how we remove a horizontal line worth of 20 pixels in width.
}
else {
var index = (y * width + x) * 4; // index of the current pixel
arrayToInsert.push(oldArray[index]);
arrayToInsert.push(oldArray[index + 1]);
arrayToInsert.push(oldArray[index + 2]);
arrayToInsert.push(oldArray[index + 3]);
}
}
}
for (var i = 0; i < 200; i = i + 1) {
for (var j = 0; j < 160; j++) {
var index = (i * width + j) * 4;
if (j < 80 && j > 70) {
// this draw a vertical line of pixels that have (0,0,0,0) in rgb+a in the middle of the image.
arrayToInsert[index] = 0;
arrayToInsert[index + 1] = 0;
arrayToInsert[index + 2] = 0;
arrayToInsert[index + 3] = 0
// uncomment this.
// arrayToInsert.splice (index, 4);
// this does not work for some reason, but it should
}
}
}
vnewid.data.set(arrayToInsert);
newContext2d.putImageData(vnewid, 0, 0, 0, 0, 200, 160);
var newC = newCanvas.toDataURL();
console.log(newC);
// take this console.log base64 encoded image and put it here.
// https://codebeautify.org/base64-to-image-converter
}
在這一行。
arrayToInsert[index] = 0;
arrayToInsert[index + 1] = 0;
arrayToInsert[index + 2] = 0;
arrayToInsert[index + 3] = 0;
我可以得出一個符合this.However一條垂直線,如果我嘗試完全刪除那些像素,圖像數據被破壞,它是沒有意義的,我不明白爲什麼。
arrayToInsert.splice (index, 4);
而不是使所有這些像素(0 0 0 0),我想刪除它們,以便圖像被裁剪。
這裏是鏈接到3個文件
https://drive.google.com/open?id=0B06HbozeqdkZXzNDUTJKelVZMmc
注(一個html,用照片和JS):我想在圖像的中間裁剪,而不是邊緣圖片。
像這裏的蛋糕。
我將削減的矩形第i將在2份蛋糕的壓入彼此,所以它成爲一個單一的蛋糕,除了與在中間具有裁切出矩形。
如果你只是想裁剪圖像使用['putImageData']的參數(https://developer.mozilla.org/en-US/docs/Web/API/ CanvasRenderingContext2D/putImageData)來設置你想要圖像'dirtyX'和'dirtyY'開始的位置以及你想繪製的'dirtyWidth'和'dirtyHeight'。否則,您可以將圖像繪製到*「刪除」*像素上。 –
我想在圖像中間裁剪。 – Aflred
根據定義裁剪只是刪除圖像的外部部分,無論如何,因爲我說你可以在圖像上繪製。 –