É possível, no momento do upload de um arquivo para o servidor, descobrir as dimensões do arquivo? Se sim, como?
Preciso desenvolver um sistema para upload de fotos, sendo que as mesmas não podem ser maiores do que 600px (largura) ou 450px (altura).
Eu acho que só depois do upload completo.
Em javascript não se pode pegar arquivos do cliente e verificar propriedades dele, então tem que fazer upload da imagem para o servidor, ai fica fácil verificar o tamanho em pixels dela.
A menos que tu use outra linguagem (dot net, flash, silverlight) ai tlz tenha como fazer isso.
[quote=ivo costa]Eu acho que só depois do upload completo.
Em javascript não se pode pegar arquivos do cliente e verificar propriedades dele, então tem que fazer upload da imagem para o servidor, ai fica fácil verificar o tamanho em pixels dela.
A menos que tu use outra linguagem (dot net, flash, silverlight) ai tlz tenha como fazer isso.[/quote]
Eu acabei tendo esta dúvida pois antigamente programava em PHP, e em PHP isso é moleza de fazer. A página para a qual o form é submetido pega o arquivo enviado e faz as verificações para só depois disso enviar para o servidor.
public class Thumbnail {
/**
* Reads an image in a file and creates
* a thumbnail in another file.
* @param orig The name of image file.
* @param thumb The name of thumbnail file.
* Will be created if necessary.
* @param maxDim The width and height of
* the thumbnail must
* be maxDim pixels or less.
*/
public boolean precisaRedimensionar(byte[] img, int tamanhoMax){
boolean tamanho = false;
Image inImage = new ImageIcon(img).getImage();
if ( (inImage.getWidth(null) > tamanhoMax) || (inImage.getHeight(null) > tamanhoMax) ) {
tamanho = true;
}
return tamanho;
}
public ByteArrayOutputStream createThumbnail(byte[] orig, int maxDim) {
ByteArrayOutputStream btImage = new ByteArrayOutputStream();
try {
// Get the image from a file.
Image inImage = new ImageIcon(orig).getImage(); //posso passar um array de bytes (no construtor ImageIcon)
// Determine the scale.
double scale = (double)maxDim/(double)inImage.getHeight(null);
if (inImage.getWidth(null) > inImage.getHeight(null)) {
scale = (double)maxDim/(double)inImage.getWidth(null);
}
// Determine size of new image.
//One of them
// should equal maxDim.
int scaledW = (int)(scale*inImage.getWidth(null));
int scaledH = (int)(scale*inImage.getHeight(null));
// Create an image buffer in
//which to paint on.
BufferedImage outImage = new BufferedImage(scaledW, scaledH, BufferedImage.TYPE_INT_RGB);
// Set the scale.
AffineTransform tx = new AffineTransform();
// If the image is smaller than
//the desired image size,
// don't bother scaling.
if (scale < 1.0d){
tx.scale(scale, scale);
}
// Paint image.
Graphics2D g2d = outImage.createGraphics();
g2d.drawImage(inImage, tx, null);
g2d.dispose();
// JPEG-encode the image
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(btImage);
encoder.encode(outImage);
btImage.close();
} catch(IOException e){
e.printStackTrace();
}
return btImage;
}
É possível, no momento do upload de um arquivo para o servidor, descobrir as dimensões do arquivo? Se sim, como?
[/quote]
“No momento do upload” não é claro. Ou vc verifica antes do upload, ou depois.
Antes vc verifica no browser ( via javascript), mas essa verificação - se possivel - embora util e informativa nunca deve ser o unico controle. Portanto vc precisa de fazer isso depois, no servidor, sempre.
O único senão é que para usar o pacote awt em linux é preciso que ele seja instalado com os pacotes gráficos. Verifique com quem mantem o ser servidor ( se ele for em linux)