We are about to switch to a new forum software. Until then we have removed the registration on this forum.
I am looking for a good way to compress images, fast(er) I have this, but it needs to be faster as I am streaming video over a network
byte[] compressImg(PImage img,int w, int h, float quality){
byte[] output;
BufferedImage bimg = new BufferedImage(w,h, BufferedImage.TYPE_INT_RGB );
bimg.setRGB( 0, 0, w,h, img.pixels, 0, img.width);
Iterator iterator=ImageIO.getImageWritersByFormatName("jpg");
ImageWriter writer=(ImageWriter)iterator.next();
ImageWriteParam p=writer.getDefaultWriteParam();
p.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
p.setCompressionQuality(quality);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageOutputStream ios=null;
try{
ios = ImageIO.createImageOutputStream(bos);
writer.setOutput(ios);
writer.write(null,new IIOImage(bimg,null,null),p);
ios.flush();
bimg.flush();
writer.dispose();
ios.close();
}catch(Exception e){
println(e+"@ios");
}
//println(bos.toByteArray().length);
output = new byte[bos.toByteArray().length];
output = bos.toByteArray();
return output;
}
btw i want to output it to a byte array in the end, but any help on the image compression part would be awesome
Answers
or maybe just some help on optimization of the above
is this just way past what I should be doing with processing?
Image compression, if you need it to be efficient, is quite complex and time-consuming. There are simpler algorithms, like RLE, but they are efficient only with simple images (B&W, flat colors, etc.).
I think I am going to end up streaming the video. hopefully the above code helps someone. From what I have gathered, gstreamer is the most used solution. So I will dig into that