mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-09-14 13:36:36 +00:00
feat: add split to parts core tool
This commit is contained in:
@@ -56,6 +56,36 @@ export function tile(
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Разрезает изображение на сетку columns × rows строго равных частей.
|
||||||
|
* Холст дополняется прозрачным до кратного размера (`ceil(width / cols)`),
|
||||||
|
* поэтому весь исходный контент сохраняется. Порядок — row-major: сначала все
|
||||||
|
* столбцы первой строки (part 1-1, 1-2, …), затем второй и т.д.
|
||||||
|
*/
|
||||||
|
export function splitToParts(
|
||||||
|
img: PixelImage,
|
||||||
|
columns: number,
|
||||||
|
rows: number,
|
||||||
|
): PixelImage[] {
|
||||||
|
const cols = Math.max(1, Math.trunc(columns));
|
||||||
|
const rowsCount = Math.max(1, Math.trunc(rows));
|
||||||
|
const pieceW = Math.ceil(img.width / cols);
|
||||||
|
const pieceH = Math.ceil(img.height / rowsCount);
|
||||||
|
const gridW = pieceW * cols;
|
||||||
|
const gridH = pieceH * rowsCount;
|
||||||
|
const padded =
|
||||||
|
gridW === img.width && gridH === img.height
|
||||||
|
? img
|
||||||
|
: expandCanvas(img, 0, 0, gridW - img.width, gridH - img.height);
|
||||||
|
const parts: PixelImage[] = [];
|
||||||
|
for (let row = 0; row < rowsCount; row++) {
|
||||||
|
for (let col = 0; col < cols; col++) {
|
||||||
|
parts.push(crop(padded, col * pieceW, row * pieceH, pieceW, pieceH));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return parts;
|
||||||
|
}
|
||||||
|
|
||||||
export function centerByAlpha(img: PixelImage): PixelImage {
|
export function centerByAlpha(img: PixelImage): PixelImage {
|
||||||
let minX = img.width;
|
let minX = img.width;
|
||||||
let minY = img.height;
|
let minY = img.height;
|
||||||
|
|||||||
Reference in New Issue
Block a user