对jpg进行透明处理后,图片背景部分变黑。经查,才知道jpg不支持透明。只有png支持透明。

具体如下:

除了png还有gif和tiff的也可以,但是tiff的透明格式有些软件不支持。所以通用的就是png和gif。BMP、JPG格式的图片是不能保存透明信息的。

https://zhidao.baidu.com/question/248791033.html

1.代码:使图片透明代码:

checkImgTransparent方法为检查图片是否为透明。如果已透明,就再不需要做透明处理

package com.bootdo.common.utils.generateImage;import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.regex.Pattern;import static com.bootdo.common.aspect.Test.colorInRange;/*** Created by jq on 2019/2/23.*/
public class ImageTransparent {public static void img2BackGroundTransparent(String path) {// TODO Auto-generated constructor stubtry {//判断是否为透明图片if(checkImgTransparent(path)){return;}BufferedImage image = ImageIO.read(new File(path));ImageIcon imageIcon = new ImageIcon(image);BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(),BufferedImage.TYPE_4BYTE_ABGR);Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();g2D.drawImage(imageIcon.getImage(), 0, 0,imageIcon.getImageObserver());int alpha = 0;for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) {for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) {int rgb = bufferedImage.getRGB(j2, j1);if (colorInRange(rgb)){alpha = 0;}else{alpha = 255;}rgb = (alpha << 24) | (rgb & 0x00ffffff);bufferedImage.setRGB(j2, j1, rgb);}}g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver());// 生成图片为PNG//如果jpg格式,则透明处理后变为黑。因jpg为不支持透明。所以此处格式强制为pngImageIO.write(bufferedImage, "png", new File(path));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*private static boolean colorInRange(int color) {int red = (color & 0xff0000) >> 16;int green = (color & 0x00ff00) >> 8;int blue = (color & 0x0000ff);if (red >= color_range && green >= color_range && blue >= color_range){return true;}return false;}private static int color_range = 210;private static Pattern pattern = Pattern.compile("[0-9]*");private static boolean isNo(String str) {return pattern.matcher(str).matches();}*/private static boolean checkImgTransparent(String path) throws IOException{File file = new File(path);BufferedImage bi = (BufferedImage) ImageIO.read(file);// 获取图像的宽度和高度int width = bi.getWidth();int height = bi.getHeight();boolean isTransparent = false;// 扫描图片for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {// 行扫描int dip = bi.getRGB(j, i);if (dip >>24 == 0){isTransparent = true;break;}}}return isTransparent;}
}

处理png图片为透明相关推荐

  1. [css] 给一个图片设置透明有哪些方式呢?

    [css] 给一个图片设置透明有哪些方式呢? 1.opacity : 0 -> 子元素会继承 2.外层用盒子包裹,设置其rgba(255,255,255,0) 个人简介 我是歌谣,欢迎和大家一起 ...

  2. word图片靠右_如何设置word图片边缘透明

    我们在用WORD写文档的时候也通常会想法设法把文档做的漂漂亮亮的,比如说好好的排个版面,插入个图片什么的,可是插入的图片边缘颜色太明显,该怎么办呢?下面学习啦给大家分享word设置图片边缘透明的技巧, ...

  3. 图片没有透明效果html,为什么png不是透明底

    为什么把图片保存成PNG格式 背景依旧不能透明? 我把图片部分透明化之后存图,在PS中能够清楚地看到透明区域,但一保存为P你不管它在电脑里怎么样 在电脑里是看不出来透明的 要上传到网上才有效果 存为p ...

  4. 1.CDC绘图。包括加载图片,消去图片,设置图片一部分透明,不闪烁方式。

    CDC类简介:(摘抄自鸡啄米博客) CDC类是一个设备上下文类. CDC类提供了用来处理显示器或打印机等设备上下文的成员函数,还有处理与窗口客户区关联的显示上下文的成员函数.使用CDC的成员函数可以进 ...

  5. PS快速将白底图片变为透明图片的解决办法

    公司的公章被傻逼老板带到国外去啦,现在还得用公章,就只能拿以前的文件p图啦. 在将白底图片修改为透明图片时,我首先能想到的是简单的利用磁性套索工具选择图片(非常细微的操作),但是一不小心就容易出错,而 ...

  6. Photoshop png图片改变 透明背景之外的图片颜色

    png图片改变 透明背景之外的图片颜色 1.打开需要修改的图片 2.新建新的图层 3.右键创建剪切蒙版 4.打开主菜单前景色 4.设置自己想要的颜色 5.按Alt+Delete将颜色填充满蒙版 大功告 ...

  7. OSG中使用png图片显示透明效果

    常见的几种图片格式中只有png格式和gif格式的图片会有透明效果,其他图片格式都会使用白色作为底色.下面是使用OSG实现png纹理透明效果的代码,使用gif格式的图片也可以,注意:图片必须首先有透明的 ...

  8. ps怎么给图片加透明边框

    我们先打开ps软件 接着把我们需要修改的图片打开 我们点击左侧工具栏上的矩形虚框,如图,选中整张图片 在图片上右键,点击变换选区 把图片的边框位置空出来,大小可以自己定 接着我们点击编辑,描边 在弹出 ...

  9. 如何将已有图片做成透明水印_如何用Photoshop在图片上添加透明水印?

    我们经常会在网上看到一些漂亮的图片上有添加各种水印,添加水印可以让图片有一个标记,也可以防止别人盗用你的成果.那么图片上的这些水印是怎么添加的呢?今天,小编就给大家介绍用Photoshop软件来制作图 ...

  10. php添加背景图及设置格式,PHP添加PNG图片背景透明水印操作类定义与用法示例

    本文实例讲述了PHP添加PNG图片背景透明水印操作类定义与用法.分享给大家供大家参考,具体如下: 图片相关操作类 class ImageTool { private $imagePath;//图片路径 ...

最新文章

  1. 聊一下JVM是如何进行垃圾回收的算法
  2. 介绍一篇关于session的好文章,写的很详细
  3. 95 后大学生利用漏洞免费吃肯德基获刑
  4. python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别
  5. python中的ord函数
  6. 【Linux】一步一步学Linux——which命令(45)
  7. 关于ext在IE下的“ Internet Explorer 無法開啓網際網路網站 ”的问题
  8. Oracle 内核参数
  9. 20 best jquery 截图
  10. 使用缓存的9大误区(上)(转)
  11. 男人这辈子挺难的 ^^^
  12. java如何构建图_如何从传递边构建子图?
  13. python django异步访问_初试Ajax异步请求(基于Django框架)
  14. matlab repmat 函数的使用
  15. 信号与线性系统管致中第六版pdf_2021年武汉工程大学834信号与系统考研全套
  16. Laravel 之 Redis 命令大全
  17. 【英语论文】英汉委婉语的文化价值和民族特质比较(节选)
  18. 没有未桥接的主机网络适配器
  19. 去除小数点后的.或多余的0(多个方法参考)
  20. 若依前后端分离框架学习-2:登录过程

热门文章

  1. matlab如何镜像处理图片,matlab实现图像镜像
  2. 一个大专生的java从业心路历程
  3. PDF文档用什么软件打开?
  4. Redis解决商品秒杀与超卖
  5. android数学公式编辑,数学公式编辑器下载-数学方程式编辑器APP 2.122 安卓版-我游网...
  6. 微信小程序--优购商城项目(8)
  7. 基于tkinter制作的一个策略小游戏
  8. CSR867x — 广播数据设置接口以及如何添加厂商数据
  9. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java面向新手投资者的虚拟股票交易系统h1o29
  10. GC8418 数字光纤音频解码芯片 光纤解码芯片 MS8412替代