Ein bestimmtes Projekt erforderte eine große Menge schwerer "png" -Bildmuster. Wenn andererseits das Bild in Form eines einfachen "Füllens" des Quadrats erzeugt wurde, wurde es komprimiert und wurde zu höchstens einigen KB, so dass die Kapazität nicht gesichert werden konnte. Da auch das erforderliche Bildformat festgelegt wurde, war es schwierig, die Fläche einfach zu vergrößern und die Kapazität zu erhöhen.
Die Komprimierung funktioniert normalerweise stark, wenn die folgenden zwei Punkte zutreffen.
Deshalb habe ich es mit dem Kleber gemacht: "Wenn Sie viele zufällige Linien mit zufälligen Farben zeichnen, wird es schwierig sein, sie zu komprimieren."
Das Ziel ist eine Größe von 1940 x 500 und 2 MB pro Blatt. Solange wir dies erreicht haben, werden wir dies tun, ohne uns um eine weitere Erhöhung der Kapazität und der Verarbeitungszeit sorgen zu müssen.
Dies ist ein Beispiel, das 2000 Bilder im Verzeichnis $ {project root} / build / generate
generiert.
Wenn es 100.000 "Zeilen" gibt, werden 2 MB stabil überschritten.
parallelStream ()
handelt von "Es wird etwas schneller sein", und ich habe nicht bestätigt, ob es tatsächlich schneller ist.
import java.awt.Color
import java.awt.Graphics2D
import java.awt.image.BufferedImage
import java.io.File
import javax.imageio.ImageIO
import kotlin.random.Random
const val width = 1940
const val height = 500
const val lines = 100000 //Anzahl der Zeilen
const val count = 2000
fun main() {
val generateTarget = System.getProperty("user.dir") + "/build/generated/"
List(count) { it }.parallelStream().forEach { index ->
val img = BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR)
(img.graphics as Graphics2D).apply {
repeat(lines) {
//Die Transparenz wird auch mit dem Ziel festgelegt, die Kapazität der Farbe so weit wie möglich zu erhöhen.
this.color = Random.nextBytes(4).let {
Color(it[0] + 128, it[1] + 128, it[2] + 128, it[3] + 128)
}
this.drawLine(Random.nextInt(width), Random.nextInt(height), Random.nextInt(width), Random.nextInt(height))
}
dispose()
}
ImageIO.write(img, "png", File("$generateTarget${index}.png "))
}
}
Es war 4,81 GB mit 2000 Blatt und durchschnittlich 2,4 MB. Die Last war hoch und die Ausführungszeit dauerte einige Zeit. Ich denke, es ist am besten, sie in Ihrer Freizeit umzudrehen.
Ein solches Bild wird generiert.
Recommended Posts