Markup
<html> <head> <script src="https://cdn.jsdelivr.net/gh/jamesssooi/Croppr.js@2.3.0/dist/croppr.min.js"></script> <link href="https://cdn.jsdelivr.net/gh/jamesssooi/Croppr.js@2.3.0/dist/croppr.min.css" rel="stylesheet"/> <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet"> <title>Recorta tu imagen y transforma a base64</title> <style>
body {
background-color: #353a47;
color: white;
font-family: 'Montserrat', sans-serif;
}
footer {
text-align: center;
margin: 2rem 0;
}
footer a {
color: white;
text-decoration: none;
}
.container {
max-width: 1000px;
margin: 0 auto;
}
.container-demo {
display: flex;
flex-wrap: wrap;
}
.container-demo__title {
font-family: 'Montserrat', sans-serif;
text-align: center;
margin: 2rem 0;
}
.container-demo .col {
width: 50%;
min-height: 10rem;
text-align: center;
}
.container-demo img {
width: 200px;
}
.container-demo canvas {
object-fit: cover;
width: 200px;
height: 200px;
}
.container-demo code {
display: block;
height: 100px;
overflow-y: auto;
margin-bottom: 1rem;
}
</style> <script>
document.addEventListener('DOMContentLoaded', () => {
// Input File
const inputImage = document.querySelector('#image');
// Nodo donde estará el editor
const editor = document.querySelector('#editor');
// El canvas donde se mostrará la previa
const miCanvas = document.querySelector('#preview');
// Contexto del canvas
const contexto = miCanvas.getContext('2d');
// Ruta de la imagen seleccionada
let urlImage = undefined;
// Evento disparado cuando se adjunte una imagen
inputImage.addEventListener('change', abrirEditor, false);
/**
* Método que abre el editor con la imagen seleccionada
*/
function abrirEditor(e) {
// Obtiene la imagen
urlImage = URL.createObjectURL(e.target.files[0]);
// Borra editor en caso que existiera una imagen previa
editor.innerHTML = '';
let cropprImg = document.createElement('img');
cropprImg.setAttribute('id', 'croppr');
editor.appendChild(cropprImg);
// Limpia la previa en caso que existiera algún elemento previo
contexto.clearRect(0, 0, miCanvas.width, miCanvas.height);
// Envia la imagen al editor para su recorte
document.querySelector('#croppr').setAttribute('src', urlImage);
// Crea el editor
new Croppr('#croppr', {
aspectRatio: 1,
startSize: [70, 70],
onCropEnd: recortarImagen
})
}
/**
* Método que recorta la imagen con las coordenadas proporcionadas con croppr.js
*/
function recortarImagen(data) {
// Variables
const inicioX = data.x;
const inicioY = data.y;
const nuevoAncho = data.width;
const nuevaAltura = data.height;
const zoom = 1;
let imagenEn64 = '';
// La imprimo
miCanvas.width = nuevoAncho;
miCanvas.height = nuevaAltura;
// La declaro
let miNuevaImagenTemp = new Image();
// Cuando la imagen se carge se procederá al recorte
miNuevaImagenTemp.onload = function() {
// Se recorta
contexto.drawImage(miNuevaImagenTemp, inicioX, inicioY, nuevoAncho * zoom, nuevaAltura * zoom, 0, 0, nuevoAncho, nuevaAltura);
// Se transforma a base64
imagenEn64 = miCanvas.toDataURL("image/jpeg");
// Mostramos el código generado
document.querySelector('#base64').textContent = imagenEn64;
document.querySelector('#base64HTML').textContent = '<img src="' + imagenEn64.slice(0, 40) + '...">';
}
// Proporciona la imagen cruda, sin editarla por ahora
miNuevaImagenTemp.src = urlImage;
}
/////////////////////// DEMO //////////////////////////////////
/**
* Método que seleccona todo el texto
*/
function selectText(e) {
let node = e.target;
if (document.selection) { // IE
var range = document.body.createTextRange();
range.moveToElementText(node);
range.select();
} else if (window.getSelection) {
var range = document.createRange();
range.selectNode(node);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
}
}
document.querySelector('#base64').addEventListener('click', selectText, false);
document.querySelector('#base64HTML').addEventListener('click', selectText, false);
});
</script> </head> <body> <div class="container"> <h1 class="container-demo__title">Recorta tu imagen y transforma a base64</h1> <div class="container-demo"> <div class="col"> <h2>1 Introduce tu imagen</h2> <!-- Input file donde se adjunta la imagen --> <input type="file" id="image"> </div> <div class="col"> <h2>2 Recorta</h2> <!-- Editor donde se recortará la imagen con la ayuda de croppr.js --> <div id="editor"></div> </div> <div class="col"> <h2>3 Previsualiza el resultado</h2> <!-- Previa del recorte --> <canvas id="preview"></canvas> </div> <div class="col"> <h2>4 Copia el código Base64</h2> <!-- Muestra de la imagen recortada en Base64 --> <code id="base64"></code> <h3>Ejemplo HTML</h3> <code id="base64HTML"><img src=""></code> </div> </div> </div> <footer> <a href="https://programadorwebvalencia.com/blog">Programador Web Valencia</a> </footer> </body> </html>
本段代码来自 https://chenyajun.net/index.php/post/105.html