下面列出了java.awt.image.BufferedImage#TYPE_4BYTE_ABGR_PRE() 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static BufferedImage createBufferedImage() {
BufferedImage image = new BufferedImage(128, 128,
BufferedImage.TYPE_4BYTE_ABGR_PRE);
Graphics2D graph = image.createGraphics();
graph.setPaintMode();
graph.setColor(Color.orange);
graph.fillRect(32, 32, 64, 64);
graph.dispose();
return image;
}
private static BufferedImage createBufferedImage() {
BufferedImage image = new BufferedImage(128, 128,
BufferedImage.TYPE_4BYTE_ABGR_PRE);
Graphics2D graph = image.createGraphics();
graph.setPaintMode();
graph.setColor(Color.orange);
graph.fillRect(32, 32, 64, 64);
graph.dispose();
return image;
}
static String getImageTypeName(int type) {
switch(type) {
case BufferedImage.TYPE_INT_ARGB:
return "TYPE_INT_ARGB";
case BufferedImage.TYPE_INT_RGB:
return "TYPE_INT_RGB";
case BufferedImage.TYPE_INT_BGR:
return "TYPE_INT_BGR";
case BufferedImage.TYPE_INT_ARGB_PRE:
return "TYPE_INT_ARGB_PRE";
case BufferedImage.TYPE_3BYTE_BGR:
return "TYPE_3BYTE_BGR";
case BufferedImage.TYPE_4BYTE_ABGR:
return "TYPE_4BYTE_ABGR";
case BufferedImage.TYPE_4BYTE_ABGR_PRE:
return "TYPE_4BYTE_ABGR_PRE";
case BufferedImage.TYPE_BYTE_BINARY:
return "TYPE_BYTE_BINARY";
case BufferedImage.TYPE_BYTE_GRAY:
return "TYPE_BYTE_GRAY";
case BufferedImage.TYPE_BYTE_INDEXED:
return "TYPE_BYTE_INDEXED";
case BufferedImage.TYPE_USHORT_555_RGB:
return "TYPE_USHORT_555_RGB";
case BufferedImage.TYPE_USHORT_565_RGB:
return "TYPE_USHORT_565_RGB";
case BufferedImage.TYPE_USHORT_GRAY:
return "TYPE_USHORT_GRAY";
}
return "UNKNOWN";
}
private static BufferedImage createBufferedImage() {
BufferedImage image = new BufferedImage(128, 128,
BufferedImage.TYPE_4BYTE_ABGR_PRE);
Graphics2D graph = image.createGraphics();
graph.setPaintMode();
graph.setColor(Color.orange);
graph.fillRect(32, 32, 64, 64);
graph.dispose();
return image;
}
private static BufferedImage createBufferedImage() {
BufferedImage image = new BufferedImage(128, 128,
BufferedImage.TYPE_4BYTE_ABGR_PRE);
Graphics2D graph = image.createGraphics();
graph.setPaintMode();
graph.setColor(Color.orange);
graph.fillRect(32, 32, 64, 64);
graph.dispose();
return image;
}
private static BufferedImage createBufferedImage() {
BufferedImage image = new BufferedImage(128, 128,
BufferedImage.TYPE_4BYTE_ABGR_PRE);
Graphics2D graph = image.createGraphics();
graph.setPaintMode();
graph.setColor(Color.orange);
graph.fillRect(32, 32, 64, 64);
graph.dispose();
return image;
}
public static String imageType(int type) {
switch (type) {
case BufferedImage.TYPE_3BYTE_BGR:
return "3BYTE_BGR";
case BufferedImage.TYPE_4BYTE_ABGR:
return "4BYTE_ABGR";
case BufferedImage.TYPE_4BYTE_ABGR_PRE:
return "4BYTE_ABGR_PRE";
case BufferedImage.TYPE_BYTE_BINARY:
return "BYTE_BINARY";
case BufferedImage.TYPE_BYTE_GRAY:
return "BYTE_GRAY";
case BufferedImage.TYPE_BYTE_INDEXED:
return "BYTE_INDEXED";
case BufferedImage.TYPE_CUSTOM:
return "CUSTOM";
case BufferedImage.TYPE_INT_ARGB:
return "INT_ARGB";
case BufferedImage.TYPE_INT_ARGB_PRE:
return "INT_ARGB_PRE";
case BufferedImage.TYPE_INT_BGR:
return "INT_BGR";
case BufferedImage.TYPE_INT_RGB:
return "INT_RGB";
case BufferedImage.TYPE_USHORT_555_RGB:
return "USHORT_555_RGB";
case BufferedImage.TYPE_USHORT_565_RGB:
return "USHORT_565_RGB";
}
return type + "";
}
static String getImageTypeName(int type) {
switch(type) {
case BufferedImage.TYPE_INT_ARGB:
return "TYPE_INT_ARGB";
case BufferedImage.TYPE_INT_RGB:
return "TYPE_INT_RGB";
case BufferedImage.TYPE_INT_BGR:
return "TYPE_INT_BGR";
case BufferedImage.TYPE_INT_ARGB_PRE:
return "TYPE_INT_ARGB_PRE";
case BufferedImage.TYPE_3BYTE_BGR:
return "TYPE_3BYTE_BGR";
case BufferedImage.TYPE_4BYTE_ABGR:
return "TYPE_4BYTE_ABGR";
case BufferedImage.TYPE_4BYTE_ABGR_PRE:
return "TYPE_4BYTE_ABGR_PRE";
case BufferedImage.TYPE_BYTE_BINARY:
return "TYPE_BYTE_BINARY";
case BufferedImage.TYPE_BYTE_GRAY:
return "TYPE_BYTE_GRAY";
case BufferedImage.TYPE_BYTE_INDEXED:
return "TYPE_BYTE_INDEXED";
case BufferedImage.TYPE_USHORT_555_RGB:
return "TYPE_USHORT_555_RGB";
case BufferedImage.TYPE_USHORT_565_RGB:
return "TYPE_USHORT_565_RGB";
case BufferedImage.TYPE_USHORT_GRAY:
return "TYPE_USHORT_GRAY";
}
return "UNKNOWN";
}
/**
* Returns a <code>GenericImageSinglePassIterator</code> that is either a
* <code>IntPixelIterator</code> or a <code>BytePixelIterator</code>.
*
* @param image
* the image to iterate over.
* @param iteratorType
* one of these 8 BufferedImage types: TYPE_INT_ARGB,
* TYPE_INT_ARGB_PRE, TYPE_INT_RGB, TYPE_INT_BGR, TYPE_3BYTE_BGR,
* TYPE_BYTE_GRAY, TYPE_4BYTE_ABGR, TYPE_4BYTE_ABGR_PRE.
* @return a <code>GenericImageSinglePassIterator</code> for the image
* provided.
*/
public static GenericImageSinglePassIterator get(Image image,
int iteratorType) {
if (!(iteratorType == BufferedImage.TYPE_INT_ARGB
|| iteratorType == BufferedImage.TYPE_INT_ARGB_PRE
|| iteratorType == BufferedImage.TYPE_INT_RGB
|| iteratorType == BufferedImage.TYPE_INT_BGR
|| iteratorType == BufferedImage.TYPE_3BYTE_BGR
|| iteratorType == BufferedImage.TYPE_BYTE_GRAY
|| iteratorType == BufferedImage.TYPE_4BYTE_ABGR || iteratorType == BufferedImage.TYPE_4BYTE_ABGR_PRE)) {
throw new IllegalArgumentException("illegal iterator type: "
+ iteratorType);
}
final ImageProducer producer = image.getSource();
final Consumer consumer = new Consumer(producer, iteratorType);
// ImageProducer.startProduction often starts its own thread, but it's
// not
// required to. Sometimes in my testing a BufferedImage would make
// this a blocking call. So to be safe this call should be in its
// own thread:
Thread productionThread = new Thread(
"GenericImageSinglePassIterator: Production Thread") {
@Override
public void run() {
producer.startProduction(consumer);
}
};
productionThread.start();
return consumer.getPixelIterator();
}
/**
* Checks the incoming image type against the 4 byte types this class
* supports.
*/
protected static boolean isSupportedByteType(int type) {
return (type == BufferedImage.TYPE_3BYTE_BGR
|| type == BufferedImage.TYPE_4BYTE_ABGR
|| type == BufferedImage.TYPE_4BYTE_ABGR_PRE
|| type == PixelIterator.TYPE_3BYTE_RGB
|| type == PixelIterator.TYPE_4BYTE_ARGB
|| type == PixelIterator.TYPE_4BYTE_ARGB_PRE || type == BufferedImage.TYPE_BYTE_GRAY);
}
private static BufferedImage createBufferedImage() {
BufferedImage image = new BufferedImage(128, 128,
BufferedImage.TYPE_4BYTE_ABGR_PRE);
Graphics2D graph = image.createGraphics();
graph.setPaintMode();
graph.setColor(Color.orange);
graph.fillRect(32, 32, 64, 64);
graph.dispose();
return image;
}
public int getPixelSize() {
switch (type) {
case BufferedImage.TYPE_4BYTE_ABGR:
case BufferedImage.TYPE_4BYTE_ABGR_PRE:
case PixelIterator.TYPE_4BYTE_ARGB:
case PixelIterator.TYPE_4BYTE_ARGB_PRE:
return 4;
case PixelIterator.TYPE_3BYTE_RGB:
case BufferedImage.TYPE_3BYTE_BGR:
return 3;
case BufferedImage.TYPE_BYTE_GRAY:
return 1;
}
throw new RuntimeException("unexpected iterator type: " + type);
}
static String getImageTypeName(int type) {
switch(type) {
case BufferedImage.TYPE_INT_ARGB:
return "TYPE_INT_ARGB";
case BufferedImage.TYPE_INT_RGB:
return "TYPE_INT_RGB";
case BufferedImage.TYPE_INT_BGR:
return "TYPE_INT_BGR";
case BufferedImage.TYPE_INT_ARGB_PRE:
return "TYPE_INT_ARGB_PRE";
case BufferedImage.TYPE_3BYTE_BGR:
return "TYPE_3BYTE_BGR";
case BufferedImage.TYPE_4BYTE_ABGR:
return "TYPE_4BYTE_ABGR";
case BufferedImage.TYPE_4BYTE_ABGR_PRE:
return "TYPE_4BYTE_ABGR_PRE";
case BufferedImage.TYPE_BYTE_BINARY:
return "TYPE_BYTE_BINARY";
case BufferedImage.TYPE_BYTE_GRAY:
return "TYPE_BYTE_GRAY";
case BufferedImage.TYPE_BYTE_INDEXED:
return "TYPE_BYTE_INDEXED";
case BufferedImage.TYPE_USHORT_555_RGB:
return "TYPE_USHORT_555_RGB";
case BufferedImage.TYPE_USHORT_565_RGB:
return "TYPE_USHORT_565_RGB";
case BufferedImage.TYPE_USHORT_GRAY:
return "TYPE_USHORT_GRAY";
}
return "UNKNOWN";
}
static String getImageTypeName(int type) {
switch(type) {
case BufferedImage.TYPE_INT_ARGB:
return "TYPE_INT_ARGB";
case BufferedImage.TYPE_INT_RGB:
return "TYPE_INT_RGB";
case BufferedImage.TYPE_INT_BGR:
return "TYPE_INT_BGR";
case BufferedImage.TYPE_INT_ARGB_PRE:
return "TYPE_INT_ARGB_PRE";
case BufferedImage.TYPE_3BYTE_BGR:
return "TYPE_3BYTE_BGR";
case BufferedImage.TYPE_4BYTE_ABGR:
return "TYPE_4BYTE_ABGR";
case BufferedImage.TYPE_4BYTE_ABGR_PRE:
return "TYPE_4BYTE_ABGR_PRE";
case BufferedImage.TYPE_BYTE_BINARY:
return "TYPE_BYTE_BINARY";
case BufferedImage.TYPE_BYTE_GRAY:
return "TYPE_BYTE_GRAY";
case BufferedImage.TYPE_BYTE_INDEXED:
return "TYPE_BYTE_INDEXED";
case BufferedImage.TYPE_USHORT_555_RGB:
return "TYPE_USHORT_555_RGB";
case BufferedImage.TYPE_USHORT_565_RGB:
return "TYPE_USHORT_565_RGB";
case BufferedImage.TYPE_USHORT_GRAY:
return "TYPE_USHORT_GRAY";
}
return "UNKNOWN";
}
/**
* 将商品图片,商品名字画到模版图中
*
* @param qrCodeImg 二维码图片
* @param goodPicUrl 商品图片地址
* @param goodName 商品名称
* @return
* @throws IOException
*/
private byte[] drawPicture(InputStream qrCodeImg, String goodPicUrl, String goodName) throws IOException {
//底图
ClassPathResource redResource = new ClassPathResource("back.png");
BufferedImage red = ImageIO.read(redResource.getInputStream());
//商品图片
URL goodPic = new URL(goodPicUrl);
BufferedImage goodImage = ImageIO.read(goodPic);
//小程序二维码
BufferedImage qrCodeImage = ImageIO.read(qrCodeImg);
// --- 画图 ---
//底层空白 bufferedImage
BufferedImage baseImage = new BufferedImage(red.getWidth(), red.getHeight(), BufferedImage.TYPE_4BYTE_ABGR_PRE);
//画上图片
drawImgInImg(baseImage, red, 0, 0, red.getWidth(), red.getHeight());
//画上商品图片
drawImgInImg(baseImage, goodImage, 71, 69, 660, 660);
//画上小程序二维码
drawImgInImg(baseImage, qrCodeImage, 448, 767, 300, 300);
//写上商品名称
drawTextInImg(baseImage, goodName, 65, 867);
//写上商城名称
// drawTextInImgCenter(baseImage, shopName, 98);
//转jpg
BufferedImage result = new BufferedImage(baseImage.getWidth(), baseImage
.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
result.getGraphics().drawImage(baseImage, 0, 0, null);
ByteArrayOutputStream bs = new ByteArrayOutputStream();
ImageIO.write(result, "jpg", bs);
//最终byte数组
return bs.toByteArray();
}
/**
* 将商品图片,商品名字画到模版图中
*
* @param qrCodeImg
* 二维码图片
* @param goodPicUrl
* 商品图片地址
* @param goodName
* 商品名称
* @return
* @throws IOException
*/
private byte[] drawPicture(InputStream qrCodeImg, String goodPicUrl, String goodName,BigDecimal counterPrice,BigDecimal retailPrice) throws IOException {
// 底图
ClassPathResource redResource = new ClassPathResource("back.png");
BufferedImage red = ImageIO.read(redResource.getInputStream());
// 商品图片
URL goodPic = new URL(goodPicUrl);
BufferedImage goodImage = ImageIO.read(goodPic);
// 小程序二维码
BufferedImage qrCodeImage = ImageIO.read(qrCodeImg);
// --- 画图 ---
// 底层空白 bufferedImage
BufferedImage baseImage = new BufferedImage(red.getWidth(), red.getHeight(), BufferedImage.TYPE_4BYTE_ABGR_PRE);
// 画上图片
drawImgInImg(baseImage, red, 0, 0, red.getWidth(), red.getHeight());
// 画上商品图片
drawImgInImg(baseImage, goodImage, 71, 69, 660, 660);
// 画上小程序二维码
drawImgInImg(baseImage, qrCodeImage, 448, 767, 300, 300);
// 写上商品名称,截取前面的12个字符长度
if (goodName.length() > 12) {
goodName = goodName.substring(0, 12) + "...";
}
Color colorComm = new Color(60, 60, 60);
drawTextInImg(baseImage, goodName, 65, 867, colorComm, 28);
Color priceColor = new Color(240, 20, 20);
drawTextInImg(baseImage, "现价 ", 65, 787, colorComm, 24);
drawTextInImg(baseImage, "¥ ", 120, 787, priceColor, 24);
drawTextInImg(baseImage, retailPrice.toString(), 145, 787, priceColor, 34);
drawStrikethroughTextInImg(baseImage, counterPrice.toString(), 275, 787, colorComm, 24);
// 写上商城名称
// drawTextInImgCenter(baseImage, shopName, 98);
// 转jpg
BufferedImage result = new BufferedImage(baseImage.getWidth(), baseImage.getHeight(),
BufferedImage.TYPE_3BYTE_BGR);
result.getGraphics().drawImage(baseImage, 0, 0, null);
ByteArrayOutputStream bs = new ByteArrayOutputStream();
ImageIO.write(result, "jpg", bs);
// 最终byte数组
return bs.toByteArray();
}
public static PixelFormat getPixelFormat(BufferedImage image) {
switch (image.getType()) {
case BufferedImage.TYPE_3BYTE_BGR:
return PixelFormat.BGR24;
case BufferedImage.TYPE_4BYTE_ABGR:
case BufferedImage.TYPE_4BYTE_ABGR_PRE:
return PixelFormat.ABGR;
case BufferedImage.TYPE_BYTE_BINARY:
return PixelFormat.RGB444;
case BufferedImage.TYPE_BYTE_INDEXED:
return PixelFormat.RGB555;
case BufferedImage.TYPE_BYTE_GRAY:
return PixelFormat.GRAY8;
case BufferedImage.TYPE_INT_ARGB:
case BufferedImage.TYPE_INT_ARGB_PRE:
return PixelFormat.ARGB;
case BufferedImage.TYPE_INT_RGB:
return PixelFormat.RGB24;
case BufferedImage.TYPE_USHORT_GRAY:
return PixelFormat.GRAY16;
case BufferedImage.TYPE_USHORT_555_RGB:
return PixelFormat.RGB555;
case BufferedImage.TYPE_USHORT_565_RGB:
return PixelFormat.RGB565;
case BufferedImage.TYPE_CUSTOM:
return null;
default:
return null;
}
}
/**
* 将商品图片,商品名字画到模版图中
*
* @param qrCodeImg 二维码图片
* @param goodPicUrl 商品图片地址
* @param goodName 商品名称
* @return
* @throws IOException
*/
private byte[] drawPicture(InputStream qrCodeImg, String goodPicUrl, String goodName) throws IOException {
//底图
ClassPathResource redResource = new ClassPathResource("back.png");
BufferedImage red = ImageIO.read(redResource.getInputStream());
//商品图片
URL goodPic = new URL(goodPicUrl);
BufferedImage goodImage = ImageIO.read(goodPic);
//小程序二维码
BufferedImage qrCodeImage = ImageIO.read(qrCodeImg);
// --- 画图 ---
//底层空白 bufferedImage
BufferedImage baseImage = new BufferedImage(red.getWidth(), red.getHeight(), BufferedImage.TYPE_4BYTE_ABGR_PRE);
//画上图片
drawImgInImg(baseImage, red, 0, 0, red.getWidth(), red.getHeight());
//画上商品图片
drawImgInImg(baseImage, goodImage, 71, 69, 660, 660);
//画上小程序二维码
drawImgInImg(baseImage, qrCodeImage, 448, 767, 300, 300);
//写上商品名称
drawTextInImg(baseImage, goodName, 65, 867);
//写上商城名称
// drawTextInImgCenter(baseImage, shopName, 98);
//转jpg
BufferedImage result = new BufferedImage(baseImage.getWidth(), baseImage
.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
result.getGraphics().drawImage(baseImage, 0, 0, null);
ByteArrayOutputStream bs = new ByteArrayOutputStream();
ImageIO.write(result, "jpg", bs);
//最终byte数组
return bs.toByteArray();
}
/**
* 将商品图片,商品名字画到模版图中
*
* @param qrCodeImg 二维码图片
* @param goodPicUrl 商品图片地址
* @param goodName 商品名称
* @return
* @throws IOException
*/
private byte[] drawPicture(InputStream qrCodeImg, String goodPicUrl, String goodName) throws IOException {
//底图
ClassPathResource redResource = new ClassPathResource("back.png");
BufferedImage red = ImageIO.read(redResource.getInputStream());
//商品图片
URL goodPic = new URL(goodPicUrl);
BufferedImage goodImage = ImageIO.read(goodPic);
//小程序二维码
BufferedImage qrCodeImage = ImageIO.read(qrCodeImg);
// --- 画图 ---
//底层空白 bufferedImage
BufferedImage baseImage = new BufferedImage(red.getWidth(), red.getHeight(), BufferedImage.TYPE_4BYTE_ABGR_PRE);
//画上图片
drawImgInImg(baseImage, red, 0, 0, red.getWidth(), red.getHeight());
//画上商品图片
drawImgInImg(baseImage, goodImage, 71, 69, 660, 660);
//画上小程序二维码
drawImgInImg(baseImage, qrCodeImage, 448, 767, 300, 300);
//写上商品名称
drawTextInImg(baseImage, goodName, 65, 867);
//写上商城名称
// drawTextInImgCenter(baseImage, shopName, 98);
//转jpg
BufferedImage result = new BufferedImage(baseImage.getWidth(), baseImage
.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
result.getGraphics().drawImage(baseImage, 0, 0, null);
ByteArrayOutputStream bs = new ByteArrayOutputStream();
ImageIO.write(result, "jpg", bs);
//最终byte数组
return bs.toByteArray();
}
public void next(byte[] dest) {
if (byteIterator != null) {
byteIterator.next(dest);
byte swap;
int rowLength = width * byteIterator.getPixelSize();
switch (originalType) {
case PixelIterator.TYPE_3BYTE_RGB:
for (int a = 0; a < rowLength; a += 3) {
swap = dest[a];
dest[a] = dest[a + 2];
dest[a + 2] = swap;
}
break;
case BufferedImage.TYPE_3BYTE_BGR:
break;
case PixelIterator.TYPE_4BYTE_ARGB:
case PixelIterator.TYPE_4BYTE_ARGB_PRE:
for (int a = 0; a < rowLength; a += 3) {
dest[a] = dest[a + 3];
swap = dest[a + 1];
dest[a + 1] = dest[a + 2];
dest[a + 2] = swap;
}
break;
case BufferedImage.TYPE_4BYTE_ABGR:
case BufferedImage.TYPE_4BYTE_ABGR_PRE:
for (int a = 0; a < rowLength; a += 4) {
dest[a] = dest[a + 1];
dest[a + 1] = dest[a + 2];
dest[a + 2] = dest[a + 3];
}
break;
case BufferedImage.TYPE_BYTE_GRAY:
for (int a = width - 1; a >= 0; a--) {
dest[3 * a] = dest[a];
dest[3 * a + 1] = dest[a];
dest[3 * a + 2] = dest[a];
}
break;
case BufferedImage.TYPE_BYTE_INDEXED:
if (rTable == null) {
rTable = new byte[indexModel.getMapSize()];
gTable = new byte[indexModel.getMapSize()];
bTable = new byte[indexModel.getMapSize()];
indexModel.getReds(rTable);
indexModel.getGreens(gTable);
indexModel.getBlues(bTable);
}
for (int a = width - 1; a >= 0; a--) {
dest[3 * a + 2] = rTable[dest[a]];
dest[3 * a + 1] = gTable[dest[a]];
dest[3 * a] = bTable[dest[a]];
}
break;
default:
throw new RuntimeException("Unrecognized type ("
+ BufferedImageIterator.getTypeName(originalType) + ")");
}
} else {
if (intScratch == null) {
intScratch = new int[intIterator.getMinimumArrayLength()];
}
intIterator.next(intScratch);
switch (originalType) {
case BufferedImage.TYPE_INT_ARGB:
case BufferedImage.TYPE_INT_ARGB_PRE:
// TODO: handle pre-multiplied alpha correctly
// (see ByteBGRAConverter for example)
case BufferedImage.TYPE_INT_RGB:
for (int a = 0; a < width; a++) {
dest[3 * a + 2] = (byte) ((intScratch[a] >> 16) & 0xff);
dest[3 * a + 1] = (byte) ((intScratch[a] >> 8) & 0xff);
dest[3 * a] = (byte) ((intScratch[a]) & 0xff);
}
break;
case BufferedImage.TYPE_INT_BGR:
for (int a = 0; a < width; a++) {
dest[3 * a + 2] = (byte) ((intScratch[a]) & 0xff);
dest[3 * a + 1] = (byte) ((intScratch[a] >> 8) & 0xff);
dest[3 * a] = (byte) ((intScratch[a] >> 16) & 0xff);
}
break;
default:
throw new RuntimeException("Unrecognized type ("
+ BufferedImageIterator.getTypeName(originalType) + ")");
}
}
}