Solved

Creating Images from Primefaces (JSF) fileupload InputStream

Posted on 2011-03-24
4
3,392 Views
Last Modified: 2012-05-11
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!

    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();
    			}
    		}
    }

Open in new window

0
Comment
Question by:cgray1223
  • 3
4 Comments
 
LVL 92

Expert Comment

by:objects
ID: 35212896
as a test try it without the resize, if that works ok we know the problem is with the resize code
0
 

Author Comment

by:cgray1223
ID: 35213111
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;
		}

	}

Open in new window

0
 
LVL 92

Expert Comment

by:objects
ID: 35213533
>                   image = createCompatibleImage(image);

comment out that line and tell me if that works
0
 
LVL 92

Accepted Solution

by:
objects earned 500 total points
ID: 35220563
jpg doesn't support transparency so you'll need to convert any pixels with transparency to a solid colour

>                   BufferedImage result = gc.createCompatibleImage(w, h, Transparency.TRANSLUCENT);

any reason you're not using the transparency setting from source image
as in this example
http://helpdesk.objects.com.au/java/how-to-convert-an-image-to-a-bufferedimage
0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
factorial example 4 41
servlet web applications   metadata-complete="true" or false 3 43
spring jars download 1 29
Unhandled exception type Exception 18 31
Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.

803 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question