2015-07-23 15 views
5

Görüntüleri alan ve yeniden boyutlandırıp karşıya yükleyen bir FTP sunucusu yazıyorum. bunun özü varBir çeşit Java/Scala görüntüsüne bayt dizisi. Performansla ilgili düşünceler

val imagesAsBytes: Array[Byte] = ... 
val bufferedImage: BufferedImage = ImageIO.read(new ByteArrayInputStream(bytes)) 
uploadImage(bufferedImage) 

şu şekildedir: (sözde kod)

Benim şu anki süreçtir. Yeniden boyutlandırmayı bıraktım çünkü önemli değil. Esasen, Array[Byte], ImageIO modülünü kullanarak BufferedImage içine serileştirir ve sonra yeniden boyutlandırır.

Bazı profiller yaptım ve ImageIO kullanarak BufferedImage oluşturmanın korkunç derecede yavaş olduğunu fark ettim.

Yalnızca Array[Byte] yüklüyorsam, aslında bir BufferedImage sürümüne dönüştürmeyi denediğime göre, yaklaşık 3 kat verim elde edebilirim. Array[Byte]'u yükleyemememin nedeni, resmi yeniden boyutlandırmam gerekiyor. BufferedImage'a bağlı değilim, sadece ilk denemem.

Bunu hızlandırmak için kullanabileceğim bazı fikirler biliyor mu? BufferedImage üzerinden kullanmam gereken daha iyi bir format var mı?

Zaten farklı bir mikro servis için yeniden boyutlandırmayı zorlamayı ve eşzamansız olarak gerçekleştirmeyi düşündüm, ancak ilk sürüm için bir seçenek değil.

Düzenleme: this soru inceledi ve bunun farkındayım adres: ImageIO.setUseCache(false)

+0

Bu yardımcı olur mu? http://docs.oracle.com/javase/7/docs/api/javax/swing/ImageIcon.html – Allison

+0

Bir görüntüyü çözmenin, yeniden örneklemeyi (yeniden boyutlandırarak) ve son olarak yeniden kodlamayı sanmıyorum. (4x) numaralarınıza göre. Aslında, şaşırtıcı bir şekilde, sadece baytları kopyalamakla kıyaslandığında ... Ya da sadece kod çözme ile karşılaştırıldığında mıydı? Neyse, hangi dosya biçimini kullanıyorsunuz? Bazı formatlar diğerlerinden daha fazla/en kod çözme daha ağırdır. – haraldK

cevap

0

ben scrimage gibi (Mayıs 2016 son sürüm) daha aktif desteklenen kütüphanede bakarak öneririz. Kaputun altında java.awt.* kullanır. En azından herhangi bir sorun durumunda, daha fazla "scalish" API kullanarak, onları ele almak ve çözüme kavuşturmak mümkün olacak.

Yardım edin.

İlgili konular