[code] public static void main(String[] args) throws IOException {
BufferedImage imagem = ImageIO.read(new GaleriaImagemAction().pegaImagem()); // Recebe uma imagem no formato InputStream, vindo de um Blob
int new_w = 512, new_h = 384; // Definição de altura e largura
BufferedImage new_img = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB); // Passando no construtor de BufferedImage
//largura; altura; tipo da imagem
Graphics2D graphics2d = new_img.createGraphics();// Uso da classe abstrata Graphics2D para manipulação da imagem (layout, cor etc)
graphics2d.drawImage(imagem, new_w, new_h, null); //? null no lugar de uma interface BufferedImageOp
ImageIO.write(new_img, "JPG", new File("C:/imagens/redimensionadas/" + imagem)); //Ele não deveria criar este diretório
//e nele jogar a imagem que está no objeto
//BufferedImagem no estado de InputStream
//convertendo para um .jpg?
}[/code]
Você precisa criar o diretório antes. Verifica se o diretório existe, cria com a função que o Paulo comentou. E depois cria o arquivo com New File na pasta que você criou.
por isso o marcelo disse para usar duas barras invertidas, pois ai da escape na barra. mas hoje em dia o construtor do File troca as barras normais por invertidas no caso windows.
Puxa, gente, me ajudaram de +… Adorei todos os exemplos…
Vejam o código:
[code]static String nomeDoImagem;
public static void main(String[] args) throws IOException {
BufferedImage imagem = ImageIO.read(new GaleriaImagemAction().pegaImagem()); // Recebe uma imagem no formato InputStream, vindo de um Blob
int new_w = 200, new_h = 200; // Definição de altura e largura
BufferedImage new_img = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB); // Passando no construtor de BufferedImage
//largura; altura; tipo da imagem
Graphics2D graphics2d = new_img.createGraphics();// Uso da classe abstrata Graphics2D para manipulação da imagem (layout, cor etc)
boolean wasRendered = graphics2d.drawImage(imagem,0,0,new_w, new_h, null); //? null no lugar de uma interface BufferedImageOp
System.out.println("wasRendered: " + wasRendered);
File diretorio = new File("C:/imagem3/redimensionada");
if (!diretorio.exists())
diretorio.mkdirs();
nomeDoImagem = "teste1";
ImageIO.write(new_img, "GIF", new File("C:\imagem3/redimensionada/" + nomeDoImagem + ".png" )); //Ele pega o diretório criado pelo mkdirs()
//e nele coloca a imagem que está no objeto
//BufferedImagem no estado de InputStream
//convertendo para um .jpg
}[/code]
Me deparo agora com as seguintes situações:
Como salvar este arquivo na pasta temporária do computador (deixando portável Linux, Windows etc),
Depois q o usuário sair do sistema, deslogar, limpar do temp
já pensou em criar uma pasta diretamente na pasta do projeto para arquivos temporários?
Caso queira usar a pasta do SO mesmo, acho que isso resolve:
System.getProperty("temp");
E no evento de deslogar ou de sair (depende do framework que você está utilizando e da sua implementação de login), você pode pegar todos os arquivos da pasta (com o metodo listFiles() ) e dar um delete nele
puxa, legal hem! Com a dica q vc deu no último post veja como já está:
[code]static String nomeDoImagem;
static File diretorio = new File(“C:/andreas/redimensionada”);
public static void main(String[] args) throws IOException {
BufferedImage imagem = ImageIO.read(new GaleriaImagemAction().pegaImagem()); // Recebe uma imagem no formato InputStream, vindo de um Blob
int new_w = 200, new_h = 200; // Definição de altura e largura
BufferedImage new_img = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB); // Passando no construtor de BufferedImage
//largura; altura; tipo da imagem
Graphics2D graphics2d = new_img.createGraphics();// Uso da classe abstrata Graphics2D para manipulação da imagem (layout, cor etc)
boolean wasRendered = graphics2d.drawImage(imagem,0,0,new_w, new_h, null); //? null no lugar de uma interface BufferedImageOp
System.out.println("wasRendered: " + wasRendered);
if (!diretorio.exists())
diretorio.mkdirs();
nomeDoImagem = "dfs";
ImageIO.write(new_img, "jpg", new File("C:\andreas/redimensionada/" + nomeDoImagem + ".jpg" )); //Ele pega o diretório criado pelo mkdirs()
//e nele coloca a imagem que está no objeto
//BufferedImagem no estado de InputStream
//convertendo para um .jpg
deletaImagensTemporarias();
}
private static void deletaImagensTemporarias(){
File[] todasImagens = diretorio.listFiles();
for (int i = 0; i < todasImagens.length; i++) {
todasImagens[i].delete();
}
}[/code]
Estamos utilizando Struts2, pensei em algo como if (session == nulll) {deletaImagensTemporarias()};
Estou pesquisando como diminuir a perca de qualidade da imagem gerada pois a imagem redimensionada fica muito estressada mal dá pra reconhecer o conteúdo dela;
System.out.println(System.getProperty(“tmpdir”)); ou “temp” imprimi null, fiz algo errado? Pesquisei ví q qdo. dou System.getProperties() ele imprimi um montam de propriedades, puxa, isso é novidade pra mim…
Descubrí o porquê q não estava acessando o diretório temp, é porque precisa passar a chave, veja:
[code]static String nomeDoImagem;
static File diretorio = new File(System.getProperty(“java.io.tmpdir”));
public static void main(String[] args) throws IOException {
BufferedImage imagem = ImageIO.read(new GaleriaImagemAction().pegaImagem()); // Recebe uma imagem no formato InputStream, vindo de um Blob
int new_w = 200, new_h = 200; // Definição de altura e largura
BufferedImage new_img = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB); // Passando no construtor de BufferedImage
//largura; altura; tipo da imagem
Graphics2D graphics2d = new_img.createGraphics();// Uso da classe abstrata Graphics2D para manipulação da imagem (layout, cor etc)
boolean wasRendered = graphics2d.drawImage(imagem,0,0,new_w, new_h, null); //? null no lugar de uma interface BufferedImageOp
System.out.println("wasRendered: " + wasRendered);
if (!diretorio.exists())
diretorio.mkdirs();
nomeDoImagem = "dfs";
ImageIO.write(new_img, "jpg", new File(System.getProperty("java.io.tmpdir") + nomeDoImagem + ".jpg" )); //Ele pega o diretório criado pelo mkdirs()
//e nele coloca a imagem que está no objeto
//BufferedImagem no estado de InputStream
//convertendo para um .jpg
//deletaImagensTemporarias();
}
private static void deletaImagensTemporarias(){
File[] todasImagens = diretorio.listFiles();
for (int i = 0; i < todasImagens.length; i++) {
todasImagens[i].delete();
}
}[/code]
Gente, alguém conseguiria me explicar o porquê não consigo criar uma subpasta dentro do diretório temp?
saveImage(img, .9f, System.getProperty("java.io.tmpdir")+ "\nomeDaSubpasta\" + "Ninféiass_new2d.jpg"); // Estam sendo passados de argumento: InputStream (foto), qualidade da imagem e o diretório temp do SO
Realmente muito estranho, não? Estive pesquisando e conversando com algumas pessoas, percebí que de fato não há um link estabelecido com a máquina cliente, ou há?