diff src/uploadcare/croppr.html @ 0:8f4df159f06b

start public repo
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 11 Jul 2025 20:57:49 -0600
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/uploadcare/croppr.html	Fri Jul 11 20:57:49 2025 -0600
@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+	<head>
+		<meta name="viewport" content="width=device-width, initial-scale=1">
+		<style>
+			@import "croppr.css";
+
+			xdialog[croppr] {
+				height: 200px;
+			}
+			xdialog[croppr] div[img] {
+				height: 400px;
+				max-height: 80vh;
+			}
+			dialog[croppr] img {
+				xwidth: 200px;
+				xheight: 100%;
+				height: 400px;
+				max-height: calc(90vh - 110px);
+				display: block;
+			}
+			dialog[croppr] div[buttons] {
+				margin: 8px;
+			}
+			canvas[result] {
+				width: 200px;
+			}
+		</style>
+		<script src="croppr.js"></script>
+		<script>
+			let croppr;
+			function start() {
+				let dialog = document.querySelector('dialog');
+				dialog.showModal();
+				let img = dialog.querySelector('img');
+				//img.src = 'https://ucarecdn.com/ede0040a-b577-4c2e-aeaf-b7f557ba2747/-/quality/smart/';
+				croppr = new Croppr(img, {
+					aspectRatio: 1,
+					//startSize: [100, 100, '%'],
+				});
+			}
+			function cancelCrop() {
+				document.querySelector('dialog[open]').close();
+			}
+			function crop() {
+				let value = croppr.getValue();
+				console.log(value);
+				let width = value.width;
+				let height = value.height;
+				croppr.destroy();
+				let dialog = document.querySelector('dialog');
+				let imgCroppr = dialog.querySelector('img[croppr]');
+				console.log(imgCroppr);
+				//let canvas = document.createElement('canvas');
+				let canvas = document.querySelector('canvas[result]');
+				canvas.width = width;
+				canvas.height = height;
+				let ctx = canvas.getContext('2d');
+				ctx.drawImage(imgCroppr, value.x, value.y, width, height, 0, 0, width, height);
+				//let imgResult = document.querySelector('img[result]');
+				//imgResult.url = canvas.toDataURL();
+				dialog.close();
+			}
+		</script>
+	</head>
+	<body>
+		<p>top</p>
+		<p><button onclick="start()">start</button>
+		<dialog croppr onclose="croppr.destroy()">
+			<div img><img croppr src="https://ucarecdn.com/ede0040a-b577-4c2e-aeaf-b7f557ba2747/-/quality/smart/"></div>
+			<div buttons>
+				<button onclick="crop()">crop</button>
+				<button onclick="cancelCrop()">cancel</button>
+			</div>
+		</dialog>
+		<p>result</p>
+		<p><canvas result></canvas></p>
+		<p><img crossorigin="anonymous" result></p>
+		<p>bottom</p>
+	</body>
+</html>