[Kotlin] Je voulais générer un png avec une grande capacité par zone [Java]

Ce que je voulais faire

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é.

politique

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.

la mise en oeuvre

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 "))
    }
}

Résultat d'exécution

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. 0.png

Recommended Posts

[Kotlin] Je voulais générer un png avec une grande capacité par zone [Java]
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
J'ai essayé de casser le bloc avec java (1)
Je veux faire des transitions d'écran avec kotlin et java!
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
Je voulais juste créer une propriété réactive en Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Je veux implémenter diverses fonctions avec kotlin et java!
J'ai essayé d'interagir avec Java
Une histoire que j'ai eu du mal à défier le pro de la concurrence avec Java
Je veux revenir à l'écran précédent avec kotlin et java!
Je voulais écrire un processus équivalent à une instruction while avec l'API Java 8 Stream
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
Je souhaite créer un SNS Web sombre avec Jakarta EE 8 avec Java 11
Je voulais mettre en place un diaporama de manière à la mode avec slick.
J'ai créé une application Janken avec kotlin
Je veux ForEach un tableau avec une expression Lambda en Java
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
[Java] J'ai essayé de me connecter en utilisant le pool de connexion avec Servlet (tomcat) & MySQL & Java
J'ai essayé de générer automatiquement une classe à convertir d'une classe de données en un bundle avec APT
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
J'ai essayé de faire une authentification de base avec Java
java j'ai essayé de casser un simple bloc
Je l'ai fait en Java pour toujours rendre (a == 1 && a == 2 && a == 3) vrai
Je veux utiliser java8 forEach avec index
Premiers pas avec Kotlin à envoyer aux développeurs Java
Ce que j'ai fait lorsque j'ai converti Java en Kotlin
Je voulais classer la botte à ressort dans un multi-projet
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
[Azure] J'ai essayé de créer une application Java gratuitement ~ Se connecter avec FTP ~ [Débutant]
Je souhaite l'implémenter en plus lors de l'utilisation de kotlin sur un site exécutant Java
J'ai essayé ce que je voulais essayer avec Stream doucement.
Soumettre une tâche à AWS Batch avec Java (Eclipse)
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
Appeler une méthode avec le bloc de rappel de Kotlin depuis Java
Comment générer manuellement un JWT avec Knock in Rails
J'ai essayé de créer une compétence Clova en Java
Je souhaite surveiller un fichier spécifique avec WatchService
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé OCR de traiter un fichier PDF avec Java
J'ai essayé d'implémenter Sterling Sort avec Java Collector
J'avais l'habitude de faire nc (netcat) avec JAVA normalement
[Java] Comment rompre une ligne avec StringBuilder
Je veux écrire une boucle qui fait référence à un index avec l'API Stream de Java 8
Je veux renvoyer un type différent de l'élément d'entrée avec Java8 StreamAPI Reduce ()
Programme Java pour redimensionner une photo dans un carré avec des marges
Comment utiliser le modèle entraîné Tensorflow 2.0 avec Kotlin / Java
[Java] Je souhaite convertir un tableau d'octets en un nombre hexadécimal
J'ai essayé de résumer les bases de kotlin et java
[Rails] J'ai essayé de créer une mini application avec FullCalendar
[Débutant] Essayez de créer un jeu RPG simple avec Java ①
J'ai créé un plug-in qui exécute jextract avec des tâches Gradle
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java