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)
Bu yardımcı olur mu? http://docs.oracle.com/javase/7/docs/api/javax/swing/ImageIcon.html – Allison
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