Estoy buscando una forma de cambiar el tamaño de una imagen del lado del cliente con JavaScript (realmente cambiar el tamaño, no solo cambiar el ancho y la altura).
Sé que es posible hacerlo en Flash, pero me gustaría evitarlo si es posible.
¿Hay algún algoritmo de código abierto en algún lugar de la web?
javascript
image
resize
client-side
Geraud
fuente
fuente
Respuestas:
Aquí hay una esencia que hace esto: https://gist.github.com/dcollien/312bce1270a5f511bf4a
(una versión es6 y una versión .js que se puede incluir en una etiqueta de script)
Puede usarlo de la siguiente manera:
Incluye un montón de detección de soporte y polyfills para asegurarse de que funcione en todos los navegadores que pueda administrar.
(también ignora las imágenes gif, en caso de que estén animadas)
fuente
imageSmoothingEnabled
como verdadero` yimageSmoothingQuality
parahigh
. En mecanografiado, ese bloque se ve así:const ctx = canvas.getContext('2d'); ctx.imageSmoothingEnabled = true; (ctx as any).imageSmoothingQuality = 'high'; ctx.drawImage(image, 0, 0, width, height);
La respuesta a esto es sí: en HTML 5 puede cambiar el tamaño de las imágenes del lado del cliente utilizando el elemento de lienzo. También puede tomar los nuevos datos y enviarlos a un servidor. Ver este tutorial:
http://hacks.mozilla.org/2011/01/how-to-develop-a-html5-image-uploader/
fuente
Si estabas redimensionando antes de subir, acabo de descubrir esto http://www.plupload.com/
Hace toda la magia por ti en cualquier método imaginable.
Desafortunadamente, el cambio de tamaño HTML5 solo es compatible con el navegador Mozilla, pero puede redirigir otros navegadores a Flash y Silverlight.
¡Acabo de probarlo y funcionó con mi Android!
Estaba usando http://swfupload.org/ en flash, funciona muy bien, pero el tamaño de cambio de tamaño es muy pequeño. (no recuerdo el límite) y no vuelve a html4 cuando flash no está disponible.
fuente
http://nodeca.github.io/pica/demo/
En el navegador moderno, puede usar el lienzo para cargar / guardar datos de imágenes. Pero debe tener en cuenta varias cosas si cambia el tamaño de la imagen en el cliente:
fuente
Quizás con la etiqueta del lienzo (aunque no es portátil). Hay un blog sobre cómo rotar una imagen con lienzo aquí , supongo que si puede rotarlo, puede cambiar su tamaño. Quizás puede ser un punto de partida.
Ver esta biblioteca también.
fuente
Puede usar un marco de procesamiento de imágenes de JavaScript para el procesamiento de imágenes del lado del cliente antes de cargar la imagen en el servidor.
A continuación, utilicé MarvinJ para crear un código ejecutable basado en el ejemplo de la página siguiente: "Procesar imágenes en el lado del cliente antes de cargarlo en un servidor"
Básicamente, uso el método Marvin.scale (...) para cambiar el tamaño de la imagen. Luego, subo la imagen como un blob (usando el método image.toBlob () ). El servidor responde proporcionando una URL de la imagen recibida.
fuente
Sí, con los navegadores modernos esto es totalmente factible. Incluso factible hasta el punto de cargar el archivo específicamente como un archivo binario que haya realizado cualquier cantidad de alteraciones en el lienzo.
http://jsfiddle.net/bo40drmv/
(esta respuesta es una mejora de la respuesta aceptada aquí )
Teniendo en cuenta capturar el proceso de envío de resultados en PHP con algo parecido a:
Si uno se preocupa por el punto de Vitaly, puede intentar recortar y cambiar el tamaño en el jfiddle de trabajo.
fuente
En mi experiencia, este ejemplo ha sido la mejor solución para cargar una imagen redimensionada: https://zocada.com/compress-resize-images-javascript-browser/
Utiliza la función HTML5 Canvas.
El código es tan 'simple' como este:
Solo hay una desventaja con esta opción, y está relacionada con la rotación de la imagen, debido a ignorar los datos EXIF. En lo que estoy trabajando en este momento. Se actualizará después de que haya terminado con eso.
Otro inconveniente es la falta de soporte para IE / Edge, en el que también estoy trabajando. Aunque hay información en el enlace de arriba. Para los dos problemas.
fuente