новый FileDataSource из BufferedImage? - PullRequest
0 голосов
/ 13 декабря 2011

Можете ли вы сделать что-то подобное, чтобы получить буферизованное изображение в качестве местоположения файла?

DataSource source =  new FileDataSource(ImageIO.write(image, "png", file));

Я пытаюсь отправить буферизованное изображение как вложение, используя Java Mail API без необходимости сначала сохранять файл?

TIA

Ответы [ 3 ]

3 голосов
/ 13 декабря 2011

Создайте свой собственный DataSource класс и возьмите свой входной поток из ByteArrayInputStream, оборачивая байты изображения.

Что-то вроде:

public class ImageDataSource implements DataSource {

private Image image = null;
private String imageName = "";

public ImageDataSource( Image image, String imageName ) {
    this.image = image;
    this.imageName = imageName;
}//cons

public InputStream getInputStream() {
  return new ByteArrayInputStream( image.getBytes() );
}//met

public OutputStream getOutputStream() {
  throw new IOException();
}//met

public String getName() {
  return imageName;
}//met

public String getMimeType() {
  return "image/png";
}//met

private byte [] getImgBytes(Image image) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
        ImageIO.write(getBufferedImage(image), "png", baos);
    } catch (IOException ex) {
        //handle it here.... not implemented yet...
    }
    return baos.toByteArray();
}//met

}//class

Более или менее, я не получил IDE:)

1 голос
/ 13 декабря 2011

Я работал над этим, занимаясь программированием, но оно работает:

File file = new File("temp.png");
ImageIO.write(originalImage, "png", file);
DataSource source =  new FileDataSource(file);  

Затем, когда все это сделано, я просто:

file.delete();
0 голосов
/ 13 декабря 2011

Нет, это не компилируется, поскольку ImageIO.write возвращает boolean, FileDataSource ожидает имя файла / файла в своем конструкторе

...