Solved

Creating Images from Primefaces (JSF) fileupload InputStream

Posted on 2011-03-24
4
3,372 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
allswap challenge 6 79
Problem to start Neon 20 87
starter POM and spring-boot-starter,  spring-boot-web 2 43
Error in @AspectJ Based AOP with Spring 2 0
Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.

920 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

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now