Jak v Javě na náhledy obrázků, ze kterých si lidé nebudu chtít vydloubat oči a prázdné oční důlky vypláchnout kyselinou
25. 3. 2017
Jedna rychlovka, která je spíš poznámkou pro mě v budoucnosti než pro kohokoli jiného: Funkcionalita ve standardní knihovně v Javy není příliš dobrá pro vytváření náhledů obrázků. Zmenšený obrázek má výrazný aliasing.
To se dá jednoduše obejít tím, že obrázek napřed rozmažu a pak teprve zmenším. Výsledek není perfektní, ale aspoň není tak zubatý a hlavně: jde jen o minimální změnu.
def resizeImage(src: BufferedImage, width: Int, height: Int) = { val blur = new ConvolveOp( new Kernel(5, 5, Array.fill[Float](25)(1f/25)), ConvolveOp.EDGE_NO_OP, null ) val zoom = math.min(1.0 * src.getWidth / width, 1.0 * src.getHeight / height) val wz = (width * zoom).toInt val hz = (height * zoom).toInt val x = (src.getWidth - wz) / 2 val y = (src.getHeight - hz) / 2 val crop = blur.filter(src.getSubimage(x, y, wz, hz), null) val tpe = if (crop.getType == BufferedImage.TYPE_CUSTOM) BufferedImage.TYPE_INT_ARGB else crop.getType val thumb = new BufferedImage(width, height, tpe) val g = thumb.createGraphics() g.drawImage(crop, 0, 0, width, height, null) g.dispose() thumb }