cgray1223
asked on
Creating Images from Primefaces (JSF) fileupload InputStream
Hello,
When I try to convert an InputStream from the primefaces fileupload component I just get black images. I want to convert png and gif to jpg but this happened going from a jpg to a jpg, any help is greatly appreciated!
When I try to convert an InputStream from the primefaces fileupload component I just get black images. I want to convert png and gif to jpg but this happened going from a jpg to a jpg, any help is greatly appreciated!
public void handleFileUpload(FileUploadEvent event) {
UploadedFile tfile = event.getFile();
String str = tfile.getFileName();
//String ext = str.substring(str.lastIndexOf('.'), str.length());
String fileName = utilities.getLoggedInUser().getId() + "_" + new Date().getTime();
String filePath = uploadPath + fileName;
try {
imageService.createDreamImages(event.getFile().getInputstream(), filePath, "jpg", 800, 200);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
public class ImageResizeImpl implements ImageResizeService{
public void createDreamImages(InputStream in, String location, String fileType, int imageSize, int imageThumbSize) throws Exception{
try {
BufferedImage image = ImageIO.read(in);
ImageIO.write(resizeTrick(image, imageSize, imageSize), fileType, new File(location + "." + fileType));
ImageIO.write(resizeTrick(image, imageThumbSize, imageThumbSize), fileType, new File(location + "_t." + fileType));
}
catch (IOException e) {
throw new Exception();
}
}
}
as a test try it without the resize, if that works ok we know the problem is with the resize code
ASKER
yeah it works otherwise, here is the whole implementation
@Named("imageService")
public class ImageResizeImpl implements ImageResizeService{
public void createDreamImages(InputStream in, String location, String fileType, int imageSize, int imageThumbSize) throws Exception{
try {
BufferedImage image = ImageIO.read(in);
ImageIO.write(resizeTrick(image, imageSize, imageSize), fileType, new File(location + "." + fileType));
ImageIO.write(resizeTrick(image, imageThumbSize, imageThumbSize), fileType, new File(location + "_t." + fileType));
}
catch (IOException e) {
throw new Exception();
}
}
private static BufferedImage resize(BufferedImage image, int width, int height) {
int type = image.getType() == 0? BufferedImage.TYPE_INT_ARGB : image.getType();
BufferedImage resizedImage = new BufferedImage(width, height, type);
Graphics2D g = resizedImage.createGraphics();
g.setComposite(AlphaComposite.Src);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.drawImage(image, 0, 0, width, height, null);
g.dispose();
return resizedImage;
}
private static BufferedImage resizeTrick(BufferedImage image, int width, int height) {
image = createCompatibleImage(image);
image = resize(image, 100, 100);
image = blurImage(image);
return resize(image, width, height);
}
public static BufferedImage blurImage(BufferedImage image) {
float ninth = 1.0f/9.0f;
float[] blurKernel = {
ninth, ninth, ninth,
ninth, ninth, ninth,
ninth, ninth, ninth
};
Map<RenderingHints.Key, Object> map = new HashMap<RenderingHints.Key, Object>();
map.put(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
map.put(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
map.put(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
RenderingHints hints = new RenderingHints(map);
BufferedImageOp op = new ConvolveOp(new Kernel(3, 3, blurKernel), ConvolveOp.EDGE_NO_OP, hints);
return op.filter(image, null);
}
private static BufferedImage createCompatibleImage(BufferedImage image) {
GraphicsConfiguration gc = BufferedImageGraphicsConfig.getConfig(image);
int w = image.getWidth();
int h = image.getHeight();
BufferedImage result = gc.createCompatibleImage(w, h, Transparency.TRANSLUCENT);
Graphics2D g2 = result.createGraphics();
g2.drawRenderedImage(image, null);
g2.dispose();
return result;
}
}
> image = createCompatibleImage(imag e);
comment out that line and tell me if that works
comment out that line and tell me if that works
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.