split concentric into two modes

This commit is contained in:
Tomáš Mládek 2020-07-15 23:05:15 +02:00
parent 5caaf81699
commit 7711f19810

View file

@ -1,7 +1,7 @@
import {CollageMode} from "@/types"; import {CollageMode} from "@/types";
import {randint, shuffle} from "@/utils"; import {randint, shuffle} from "@/utils";
const collageModeType = ["grid", "row", "irow", "col", "icol", "center"] as const; const collageModeType = ["grid", "row", "irow", "col", "icol", "concentric_factor", "concentric_spaced"] as const;
export type CollageModeType = typeof collageModeType[number]; export type CollageModeType = typeof collageModeType[number];
function cleanDraw(ctx: CanvasRenderingContext2D, image: ImageBitmap, function cleanDraw(ctx: CanvasRenderingContext2D, image: ImageBitmap,
@ -126,8 +126,8 @@ const modes: { [key in CollageModeType]: CollageMode } = {
}); });
}, },
}, },
"center": { "concentric_factor": {
name: "Concentric", name: "Constant factor concentric",
minImages: 2, minImages: 2,
forceConfig: { forceConfig: {
cleanCrops: true cleanCrops: true
@ -137,15 +137,6 @@ const modes: { [key in CollageModeType]: CollageMode } = {
const x = ctx.canvas.width / 2; const x = ctx.canvas.width / 2;
const y = ctx.canvas.height / 2; const y = ctx.canvas.height / 2;
if (Math.random() < .66) {
selectedImages.forEach((image, idx) => {
cleanDraw(
ctx, image, x, y,
ctx.canvas.width - (ctx.canvas.width / selectedImages.length * idx),
ctx.canvas.height - (ctx.canvas.height / selectedImages.length * idx),
);
});
} else {
let factor: number; let factor: number;
if (Math.random() > .5) { if (Math.random() > .5) {
const factors = [1 / Math.sqrt(2), .5, .88]; const factors = [1 / Math.sqrt(2), .5, .88];
@ -158,6 +149,25 @@ const modes: { [key in CollageModeType]: CollageMode } = {
cleanDraw(ctx, image, x, y, ctx.canvas.width * ratio, ctx.canvas.height * ratio); cleanDraw(ctx, image, x, y, ctx.canvas.width * ratio, ctx.canvas.height * ratio);
}); });
} }
},
"concentric_spaced": {
name: "Equally spaced concentric",
minImages: 2,
forceConfig: {
cleanCrops: true
},
place: (ctx, images, config) => {
const selectedImages = shuffle(images).slice(0, config.numImages || randint(4) + 2);
const x = ctx.canvas.width / 2;
const y = ctx.canvas.height / 2;
selectedImages.forEach((image, idx) => {
cleanDraw(
ctx, image, x, y,
ctx.canvas.width - (ctx.canvas.width / selectedImages.length * idx),
ctx.canvas.height - (ctx.canvas.height / selectedImages.length * idx),
);
});
} }
} }
}; };