Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 3486
  • Last Modified:

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!

    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
cgray1223
Asked:
cgray1223
  • 3
1 Solution
 
objectsCommented:
as a test try it without the resize, if that works ok we know the problem is with the resize code
0
 
cgray1223Author Commented:
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
 
objectsCommented:
>                   image = createCompatibleImage(image);

comment out that line and tell me if that works
0
 
objectsCommented:
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

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now