这就是我如何处理图像尝试一下,它是为位图设计的,但你可以编辑它来做 jpg 和 png。它将它们加载到一个字节数组中进行处理。这是我能找到的最基本的工作版本,因为我已经进一步开发了它
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageEdit
{
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException
{
// TODO Auto-generated method stub
//loadBitmapToBytes("icon","resources");
//WriteByteToBitmapFile("foo", "food", null);
}
public static byte [] loadBitmapToBytes (String filename, String dir) throws IOException
{
String a = "\\\\";
String b = ".bmp";
String readDir = dir + a + filename + b;
BufferedImage image = ImageIO.read(new File(readDir));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "bmp", baos);
byte[] img=baos.toByteArray();
return img;
}
public static void writeByteToBitmapFile (String filename, String dir, byte [] img) throws IOException
{
String a = "/";
String b = ".bmp";
String writeDir = dir + a + filename + b;
BufferedImage imageA = ImageIO.read(new ByteArrayInputStream(img));
ImageIO.write(imageA, "BMP", new File(writeDir));
System.out.println(writeDir);
}
public static byte [] invertBitmap(byte[] img)
{
int indexNo = 54;
for(int i = 54; i < (img.length-54)/3; i++)
{
img[indexNo] = (byte) (255-img[indexNo]);
indexNo++;
img[indexNo] = (byte) (255-img[indexNo]);
indexNo++;
img[indexNo] = (byte) (255-img[indexNo]);
indexNo++;
}
return img;
}
public static byte [] invertSingleBitmapChannel(char chanel, byte [] img)
{
String a = "Color Chanel bad Input";
int indexNo = 54;
for (int i = 54; i < (img.length-54)/3; i++, indexNo++ )
{
if (chanel == 'B' || chanel == 'b')
{
img[indexNo] = (byte) (255-img[indexNo]);
indexNo+=2;
}
else if (chanel == 'G' || chanel == 'g')
{
indexNo++;
img[indexNo] = (byte) (255-img[indexNo]);
indexNo++;
}
else if (chanel == 'R' || chanel == 'r')
{
indexNo+=2;
img[indexNo] = (byte) (255-img[indexNo]);
}
else
{
System.out.println(a);
return null;
}
}
return img;
}
public static byte [] greyFromBitmapColor(char fromColor, byte [] img)
{
int temp;
int indexNo = 54;
String a = "Color Chanel bad Input";
for(int i = 54; i < (img.length-54)/3; i++, indexNo++)
{
if (fromColor == 'B' || fromColor == 'b')
{
temp = img[indexNo+2];
img[indexNo] = (byte) temp;
indexNo++;
img[indexNo] = (byte) temp;
indexNo++;
}
else if (fromColor == 'G' || fromColor == 'g')
{
temp = img[indexNo+1];
img[indexNo] = (byte) temp;
indexNo+=2;
img[indexNo] = (byte) temp;
}
else if (fromColor == 'R' || fromColor == 'r')
{
temp = img[indexNo];
indexNo++;
img[indexNo] = (byte) temp;
indexNo++;
img[indexNo] = (byte) temp;
}
else
{
System.out.println(a);
return null;
}
}
return img;
}
public static byte [] greyFromBitmapAverage(byte [] img)
{
int temp;
int indexNo = 54;
for(int i = 54; i < (img.length-54)/3; i++, indexNo++)
{
temp = (img[indexNo]+img[indexNo+1]+img[indexNo+2])/3;
img[indexNo] = (byte) temp;
indexNo++;
img[indexNo] = (byte) temp;
indexNo++;
img[indexNo] = (byte) temp;
}
return img;
}
public static byte [] removeChannelFromBitmap(char lostColor, byte [] img)
{
String a = "Color Chanel bad Input";
int indexNo = 54;
for(int i = 54; i < (img.length-54)/3; i++, indexNo++)
{
if (lostColor == 'B' || lostColor == 'b')
{
img[indexNo] = 0;
indexNo+=2;
}
else if (lostColor == 'G' || lostColor == 'g')
{
indexNo++;
img[indexNo] = 0;
indexNo++;
}
else if (lostColor == 'R' || lostColor == 'r')
{
indexNo+=2;
img[indexNo] = 0;
}
else
{
System.out.println(a);
return null;
}
}
return img;
}
public static byte [] greyFromDominantBitmapColor (byte [] img)
{
int indexNo = 54;
long r = 0;
long g = 0;
long b = 0;
char dom = 'b';
for(int i = 54; i < (img.length-54)/3; i++, indexNo++)
{
b += img[indexNo];
indexNo++;
g += img[indexNo];
indexNo++;
r += img[indexNo];
}
if (b > 0)
dom = 'b';
if (g > b)
dom = 'g';
if (r > g)
dom = 'r';
greyFromBitmapColor(dom, img);
return img;
}
}
这是测试课
import java.io.IOException;
public class TestApp {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException
{
byte [] img = ImageEdit.loadBitmapToBytes("fooInv","resources");
//ImageEdit.invertBitmap(img);
//ImageEdit.greyFromBitmapColor('r',img);
ImageEdit.greyFromDominantBitmapColor(img);
//ImageEdit.invertBitmap(img);
//ImageEdit.writeByteToBitmapFile("fooInv", "resources", img);
System.out.println("Done!");
}
}