Un certain projet nécessitait une grande quantité d'échantillons d'images «png» lourds. Par contre, lorsque l'image était générée sous la forme d'un simple «remplissage» du carré, elle était compressée et devenait au plus d'environ plusieurs Ko, de sorte que la capacité ne pouvait pas être sécurisée. Comme le format d'image requis a également été décidé, il était difficile d'augmenter simplement la surface et de gagner en capacité.
La compression fonctionne généralement fortement lorsque les deux points suivants sont vrais.
Par conséquent, je l'ai fait avec la colle que "Si vous dessinez beaucoup de lignes aléatoires de couleurs aléatoires, ce sera difficile à compresser."
La cible est de taille 1940 x 500 et 2 Mo par feuille. Tant que nous y parviendrons, nous le ferons sans nous soucier d'une augmentation supplémentaire de la capacité et du temps de traitement.
Ceci est un exemple qui génère 2000 images dans le répertoire $ {project root} / build / generated
.
S'il y a 100 000 «lignes», il dépassera de manière stable 2 Mo.
parallelStream ()
parle de "Ce sera un peu plus rapide", et je n'ai pas confirmé s'il est réellement plus rapide.
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 //Nombre de lignes
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) {
//La transparence est également spécifiée dans le but d'augmenter au maximum la capacité de la couleur.
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 "))
}
}
C'était 4,81 Go avec 2000 feuilles et 2,4 Mo en moyenne. La charge était élevée et le temps d'exécution a pris un certain temps, donc je pense qu'il est préférable de l'inverser pendant votre temps libre.
Une image comme celle-ci sera générée.
Recommended Posts