Estou procurando uma maneira de redimensionar uma imagem do lado do cliente com JavaScript (realmente redimensionar, não apenas alterar a largura e a altura).
Sei que é possível fazê-lo no Flash, mas gostaria de evitá-lo, se possível.
Existe algum algoritmo de código aberto em algum lugar da web?
javascript
image
resize
client-side
geraud
fonte
fonte
Respostas:
Aqui está uma essência que faz isso: https://gist.github.com/dcollien/312bce1270a5f511bf4a
(uma versão es6 e uma versão .js que podem ser incluídas em uma tag de script)
Você pode usá-lo da seguinte maneira:
Ele inclui um monte de detecção de suporte e polyfills para garantir que ele funcione no maior número de navegadores que eu possa gerenciar.
(também ignora imagens gif - caso sejam animadas)
fonte
imageSmoothingEnabled
como true` eimageSmoothingQuality
parahigh
. No texto datilografado, esse bloco se parece com:const ctx = canvas.getContext('2d'); ctx.imageSmoothingEnabled = true; (ctx as any).imageSmoothingQuality = 'high'; ctx.drawImage(image, 0, 0, width, height);
A resposta é sim - no HTML 5 você pode redimensionar imagens do lado do cliente usando o elemento canvas. Você também pode pegar os novos dados e enviá-los para um servidor. Veja este tutorial:
http://hacks.mozilla.org/2011/01/how-to-develop-a-html5-image-uploader/
fonte
Se você estava redimensionando antes de fazer o upload, acabei de descobrir este http://www.plupload.com/
Faz toda a mágica para você em qualquer método imaginável.
Infelizmente, apenas o redimensionamento HTML5 é suportado pelo navegador Mozilla, mas você pode redirecionar outros navegadores para o Flash e o Silverlight.
Eu apenas tentei e funcionou com o meu android!
Eu estava usando http://swfupload.org/ no flash, ele faz o trabalho muito bem, mas o tamanho do redimensionamento é muito pequeno. (não se lembra do limite) e não volta para html4 quando o flash não está disponível.
fonte
http://nodeca.github.io/pica/demo/
No navegador moderno, você pode usar a tela para carregar / salvar dados de imagem. Mas você deve ter em mente várias coisas se redimensionar a imagem no cliente:
fonte
Talvez com a tag canvas (embora não seja portátil). Há um blog sobre como girar uma imagem com tela aqui , suponho que se você pode girá-lo, pode redimensioná-lo. Talvez possa ser um ponto de partida.
Veja esta biblioteca também.
fonte
Você pode usar uma estrutura de processamento de imagem javascript para processamento de imagem do lado do cliente antes de fazer upload da imagem no servidor.
Abaixo, usei o MarvinJ para criar um código executável com base no exemplo da página a seguir: "Processando imagens no lado do cliente antes de enviá-las para um servidor"
Basicamente, uso o método Marvin.scale (...) para redimensionar a imagem. Em seguida, carrego a imagem como um blob (usando o método image.toBlob () ). O servidor responde fornecendo uma URL da imagem recebida.
fonte
Sim, com navegadores modernos, isso é totalmente factível. Mesmo factível a ponto de fazer o upload do arquivo especificamente como um arquivo binário, com várias alterações de tela.
http://jsfiddle.net/bo40drmv/
(esta resposta é uma melhoria da resposta aceita aqui )
Lembre-se de capturar o processo de envio de resultados no PHP com algo semelhante a:
Se alguém se preocupa com o ponto de Vitaly, você pode tentar recortar e redimensionar o quebra-cabeça em funcionamento.
fonte
Na minha experiência, este exemplo foi a melhor solução para carregar uma imagem redimensionada: https://zocada.com/compress-resize-images-javascript-browser/
Ele usa o recurso Canvas do HTML5.
O código é tão 'simples' como este:
Há apenas uma desvantagem nessa opção, e está relacionada à rotação da imagem, devido à ignorância dos dados EXIF. No qual estou trabalhando no momento. Será atualizado depois que eu terminar com isso.
Outra desvantagem é a falta de suporte ao IE / Edge, no qual estou trabalhando também. Embora haja informações no link acima. Para ambos os problemas.
fonte