Réduire les couleurs des images
Projet gus05 de développement Java :: Chantiers :: Chantiers techniques :: Traitement des données :: Traitements sur les images
Page 1 sur 1
Réduire les couleurs des images
Voici quelques entités qui réduisent de diverses manières la palette de couleur des images, basés sur l'approche du traitement point par point.
image originale :
Le "clamping" : gus.image.transform.rendered.color.clamp
Il s'agit de restreindre l'intervalle des valeurs de R,G,B pour les couleurs d'une image, ce qui a pour effet de rendre le blanc un peu moins blanc et le noir un peu moins noir sans toucher aux couleurs intermédiaires. l'intervalle de [0-255] est ici réduit à [50-205]
La discrétisation des couleurs : gus.image.transform.rendered.color.discretize
Il s'agit de restreindre le nombre de couleurs de l'image en approximant les couleurs par discrétisation des valeurs.
Réduction aux 8 couleurs de base : gus.image.transform.rendered.color.simplecolors
Il s'agit de restreindre les couleurs de l'image aux 8 couleurs : rouge, vert, bleu, cyan, jaune, magenta, noir, blanc.
Noir et blanc : gus.image.transform.rendered.color.blackandwhite
Il s'agit de restreindre les couleurs de l'image aux 2 seules couleurs : noir, blanc.
Toutes ces entités ont surtout un rôle didactique pour vous montrer ce qu'il est possible de faire en manipulant les images point par point. Ces transformations s'apparentent le plus souvent à une réduction de la qualité des images lorsqu'on change leur format ou qu'on les compresse pour les rendre moins volumineuses. Ici, la transformation est voulue et le format de l'image reste inchangé...
image originale :
Le "clamping" : gus.image.transform.rendered.color.clamp
Il s'agit de restreindre l'intervalle des valeurs de R,G,B pour les couleurs d'une image, ce qui a pour effet de rendre le blanc un peu moins blanc et le noir un peu moins noir sans toucher aux couleurs intermédiaires. l'intervalle de [0-255] est ici réduit à [50-205]
- Code:
package gus05.entity.gus.image.transform.rendered.color.clamp;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import gus05.framework.core.Entity;
import gus05.framework.core.Outside;
import gus05.framework.core.Service;
import gus05.framework.features.Transform;
public class ImageColorClamp implements Entity, Transform {
public String getName() {return "gus.image.transform.rendered.color.clamp";}
public String getCreationDate() {return "2011.07.07";}
public static final int GAP = 50;
private Service toBufferedImage;
public ImageColorClamp() throws Exception
{toBufferedImage = Outside.service(this,"gus.image.convert.tobufferedimage");}
public Object transform(Object obj) throws Exception
{
BufferedImage image = (BufferedImage) toBufferedImage.transform(obj);
int width = image.getWidth();
int heigth = image.getHeight();
BufferedImage buffImg = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
for(int i=0;i<width;i++) for(int j=0;j<heigth;j++)
{
int rgb = image.getRGB(i,j);
Color c = new Color(rgb);
g.setColor(buildColor(c));
g.drawRect(i,j,1,1);
}
g.dispose();
return buffImg;
}
private Color buildColor(Color c)
{
int r = c.getRed();
int g = c.getGreen();
int b = c.getBlue();
if(r<GAP) r=GAP;
if(r>255-GAP) r=255-GAP;
if(g<GAP) g=GAP;
if(g>255-GAP) g=255-GAP;
if(b<GAP) b=GAP;
if(b>255-GAP) b=255-GAP;
return new Color(r,g,b);
}
}
La discrétisation des couleurs : gus.image.transform.rendered.color.discretize
Il s'agit de restreindre le nombre de couleurs de l'image en approximant les couleurs par discrétisation des valeurs.
- Code:
package gus05.entity.gus.image.transform.rendered.color.discretize;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import gus05.framework.core.Entity;
import gus05.framework.core.Outside;
import gus05.framework.core.Service;
import gus05.framework.features.Transform;
public class ImageColorDiscretize implements Entity, Transform {
public String getName() {return "gus.image.transform.rendered.color.discretize";}
public String getCreationDate() {return "2011.07.07";}
public static final int LAPSE = 50;
private Service toBufferedImage;
public ImageColorDiscretize() throws Exception
{toBufferedImage = Outside.service(this,"gus.image.convert.tobufferedimage");}
public Object transform(Object obj) throws Exception
{
BufferedImage image = (BufferedImage) toBufferedImage.transform(obj);
int width = image.getWidth();
int heigth = image.getHeight();
BufferedImage buffImg = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
for(int i=0;i<width;i++) for(int j=0;j<heigth;j++)
{
int rgb = image.getRGB(i,j);
Color c = new Color(rgb);
g.setColor(buildColor(c));
g.drawRect(i,j,1,1);
}
g.dispose();
return buffImg;
}
private Color buildColor(Color c)
{
int r = c.getRed();
int g = c.getGreen();
int b = c.getBlue();
r = ((r/LAPSE))*LAPSE;
g = ((g/LAPSE))*LAPSE;
b = ((b/LAPSE))*LAPSE;
return new Color(r,g,b);
}
}
Réduction aux 8 couleurs de base : gus.image.transform.rendered.color.simplecolors
Il s'agit de restreindre les couleurs de l'image aux 8 couleurs : rouge, vert, bleu, cyan, jaune, magenta, noir, blanc.
- Code:
package gus05.entity.gus.image.transform.rendered.color.simplecolors;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import gus05.framework.core.Entity;
import gus05.framework.core.Outside;
import gus05.framework.core.Service;
import gus05.framework.features.Transform;
public class ImageColorSimpleColors implements Entity, Transform {
public String getName() {return "gus.image.transform.rendered.color.simplecolors";}
public String getCreationDate() {return "2011.07.07";}
private Service toBufferedImage;
public ImageColorSimpleColors() throws Exception
{toBufferedImage = Outside.service(this,"gus.image.convert.tobufferedimage");}
public Object transform(Object obj) throws Exception
{
BufferedImage image = (BufferedImage) toBufferedImage.transform(obj);
int width = image.getWidth();
int heigth = image.getHeight();
BufferedImage buffImg = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
for(int i=0;i<width;i++) for(int j=0;j<heigth;j++)
{
int rgb = image.getRGB(i,j);
Color c = new Color(rgb);
g.setColor(buildColor(c));
g.drawRect(i,j,1,1);
}
g.dispose();
return buffImg;
}
private Color buildColor(Color c)
{
int r = c.getRed();
int g = c.getGreen();
int b = c.getBlue();
r = r>127?255:0;
g = g>127?255:0;
b = b>127?255:0;
return new Color(r,g,b);
}
}
Noir et blanc : gus.image.transform.rendered.color.blackandwhite
Il s'agit de restreindre les couleurs de l'image aux 2 seules couleurs : noir, blanc.
- Code:
package gus05.entity.gus.image.transform.rendered.color.blackandwhite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import gus05.framework.core.Entity;
import gus05.framework.core.Outside;
import gus05.framework.core.Service;
import gus05.framework.features.Transform;
public class ImageColorBlackAndWhite implements Entity, Transform {
public String getName() {return "gus.image.transform.rendered.color.blackandwhite";}
public String getCreationDate() {return "2011.07.07";}
public static final int RGB_BLACK = -16777216;
public static final int RGB_WHITE = -1;
private Service toBufferedImage;
public ImageColorBlackAndWhite() throws Exception
{toBufferedImage = Outside.service(this,"gus.image.convert.tobufferedimage");}
public Object transform(Object obj) throws Exception
{
BufferedImage image = (BufferedImage) toBufferedImage.transform(obj);
int width = image.getWidth();
int heigth = image.getHeight();
BufferedImage buffImg = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
double m = (RGB_BLACK+RGB_WHITE)/2;
for(int i=0;i<width;i++) for(int j=0;j<heigth;j++)
{
int rgb = image.getRGB(i,j);
rgb = rgb<m?RGB_BLACK:RGB_WHITE;
g.setColor(new Color(rgb));
g.drawRect(i,j,1,1);
}
g.dispose();
return buffImg;
}
}
Toutes ces entités ont surtout un rôle didactique pour vous montrer ce qu'il est possible de faire en manipulant les images point par point. Ces transformations s'apparentent le plus souvent à une réduction de la qualité des images lorsqu'on change leur format ou qu'on les compresse pour les rendre moins volumineuses. Ici, la transformation est voulue et le format de l'image reste inchangé...
Projet gus05 de développement Java :: Chantiers :: Chantiers techniques :: Traitement des données :: Traitements sur les images
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Mar 16 Sep - 12:01 par Gus
» Présentation du jeu Vindinium
Jeu 20 Fév - 15:32 par Gus
» Rechercher la cible la plus proche avec le "Breadth First Search"
Jeu 20 Fév - 13:06 par Gus
» Impression d'écran avec sélection de zone
Jeu 20 Fév - 12:12 par Gus
» Envoyer un mail par un compte Gmail
Jeu 25 Avr - 14:04 par Gus
» Streaming : comment télécharger les vidéos
Lun 4 Fév - 19:59 par Gus
» Synology : installer ipkg
Mar 22 Jan - 21:22 par Gus
» Trouver le type de lecteur avec JNA
Mer 9 Jan - 23:11 par Gus
» Adresse ip publique et adresse ip privée, Internet box et UPnP
Mer 9 Jan - 21:02 par Gus
» Accéder au numéro de série du lecteur par un script vb
Mer 9 Jan - 19:31 par Gus