将JPG转换为具有背景透明性的PNG

潘乔蒂亚·维普尔

JPG转换为PNG背景透明图像时,我不希望在转换后的图像上出现虚线边框

我的原始图片(JPG) 我的原始图片

我的转换图片(PNG)

在此处输入图片说明

我的源代码是

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.awt.image.ImageProducer;
import java.awt.image.RGBImageFilter;
import java.io.File;

import javax.imageio.ImageIO;

public class DemoTransparent {

    public static void main(String[] args) throws Exception {

        URL url = new URL("http://i.stack.imgur.com/jEqbx.jpg");
        Image  image1 = ImageIO.read(url);
        BufferedImage source = (BufferedImage) image1;
        int color = source.getRGB(0, 0);
        Image image = makeColorTransparent(source, new Color(color));
        BufferedImage transparent = imageToBufferedImage(image);
        File out = new File("D:\\Demo.png");
        ImageIO.write(transparent, "PNG", out);

    }

    private static BufferedImage imageToBufferedImage(Image image) {

        BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_4BYTE_ABGR_PRE);

        Graphics2D g2 = bufferedImage.createGraphics();
        g2.drawImage(image, 0, 0, null);
        g2.dispose();
        return bufferedImage;

    }

    public static Image makeColorTransparent(BufferedImage im, final Color color) {
        ImageFilter filter = new RGBImageFilter() {

            public int markerRGB = color.getRGB() | 0xFF000000;
            public final int filterRGB(int x, int y, int rgb) {
                if ((rgb | 0xFF000000) == markerRGB) {
                    return 0x00FFFFFF & rgb;
                } else {
                    return rgb;
                }
            }


        };
        ImageProducer ip = new FilteredImageSource(im.getSource(), filter);
        return Toolkit.getDefaultToolkit().createImage(ip);
    }

}

我只想要png背景透明图像

阿夫扎莱克斯

通常,我们提取与颜色完全相同或几乎相等的颜色的方法是采用阈值。

这是您的代码,几乎没有修改:

// Take another parameter i.e. threshold
public static Image makeColorTransparent(BufferedImage im, final Color color, float threshold) {
    ImageFilter filter = new RGBImageFilter() {
        public float markerAlpha = color.getRGB() | 0xFF000000;
        public final int filterRGB(int x, int y, int rgb) {
            int currentAlpha = rgb | 0xFF000000;           // just to make it clear, stored the value in new variable
            float diff = Math.abs((currentAlpha - markerAlpha) / markerAlpha);  // Now get the difference
            if (diff <= threshold) {                      // Then compare that threshold value
                return 0x00FFFFFF & rgb;
            } else {
                return rgb;
            }
        }
    };
    ImageProducer ip = new FilteredImageSource(im.getSource(), filter);
    return Toolkit.getDefaultToolkit().createImage(ip);
}

然后将函数调用为,makeColorTransparent(image, color, 0.05f);
但是图像中有问题。椭圆形角上的像素颜色与椭圆形内部(右下角)的像素颜色完全相同因此,算法也会删除这些像素。

遗憾的是,您无法包含这些像素。我试图用不同的阈值来做到这一点。但是要么包括角落,要么删除一些椭圆形像素。为此,您可以将其0.05f用作阈值,然后手动绘制所需区域(使用photoshop或任何简单的图像编辑器)。

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用PHP将PNG图像(在Photoshop中制作,具有透明性)叠加到JPG上

来自分类Dev

将具有透明度的png图像转换为jpg会破坏图像

来自分类Dev

从浏览器复制具有透明性的PNG会显示黑色背景

来自分类Dev

将透明 png 转换为 jpg powershell

来自分类Dev

PHP:将文本更改为具有透明性的PNG图像的功能

来自分类Dev

C#将具有透明性的PNG复制到剪贴板

来自分类Dev

将PDF(具有透明度*和* CMYK)转换为jpg

来自分类Dev

具有不透明性的Bootstrap模态出现在背景后面

来自分类Dev

将tiff(带有路径)转换为png并删除背景(透明)-使用PHP中的Imagemagick

来自分类Dev

将tiff(带有路径)转换为png并删除背景(透明)-在PHP中使用Imagemagick

来自分类Dev

如何将具有透明性的PNG图像粘贴到PIL中的另一幅没有白色像素的图像?

来自分类Dev

Skrollr背景透明性?

来自分类Dev

ImageMagick / Imagick:将具有Alpha通道的PNG转换为2色图像(彩色,透明)

来自分类Dev

MFC如何将具有透明属性的PNG转换为HBITMAP

来自分类Dev

Wayland会具有网络透明性吗?

来自分类Dev

当图本身具有透明性时,如何使Gnuplot中的图的键不具有透明性?

来自分类Dev

将webm转换为jpg或png

来自分类Dev

将webm转换为jpg或png

来自分类Dev

Grunt 将 .png 转换为 .jpg 文件

来自分类Dev

关于将PNG转换为JPG

来自分类Dev

Gnome终端的背景透明性

来自分类Dev

delphi将gif透明转换为png

来自分类Dev

Famo.us-如何创建具有背景不透明性但不具有文本的表面

来自分类Dev

将带有TIFF(EPT)的EPS转换为png,并保持透明背景

来自分类Dev

在哪里可以找到具有透明性的高分辨率PNG或新版Ubuntu GNOME徽标的矢量版本?

来自分类Dev

具有透明背景作为背景的PNG图像的ImageButton

来自分类Dev

如何通过转换为PNG从JPEG图像获取透明背景?

来自分类Dev

转换为 PNG 时如何使 Vaadin 图表背景透明?

来自分类Dev

iOS Objective C将具有透明背景的PNG文件加载到UIImageView

Related 相关文章

  1. 1

    使用PHP将PNG图像(在Photoshop中制作,具有透明性)叠加到JPG上

  2. 2

    将具有透明度的png图像转换为jpg会破坏图像

  3. 3

    从浏览器复制具有透明性的PNG会显示黑色背景

  4. 4

    将透明 png 转换为 jpg powershell

  5. 5

    PHP:将文本更改为具有透明性的PNG图像的功能

  6. 6

    C#将具有透明性的PNG复制到剪贴板

  7. 7

    将PDF(具有透明度*和* CMYK)转换为jpg

  8. 8

    具有不透明性的Bootstrap模态出现在背景后面

  9. 9

    将tiff(带有路径)转换为png并删除背景(透明)-使用PHP中的Imagemagick

  10. 10

    将tiff(带有路径)转换为png并删除背景(透明)-在PHP中使用Imagemagick

  11. 11

    如何将具有透明性的PNG图像粘贴到PIL中的另一幅没有白色像素的图像?

  12. 12

    Skrollr背景透明性?

  13. 13

    ImageMagick / Imagick:将具有Alpha通道的PNG转换为2色图像(彩色,透明)

  14. 14

    MFC如何将具有透明属性的PNG转换为HBITMAP

  15. 15

    Wayland会具有网络透明性吗?

  16. 16

    当图本身具有透明性时,如何使Gnuplot中的图的键不具有透明性?

  17. 17

    将webm转换为jpg或png

  18. 18

    将webm转换为jpg或png

  19. 19

    Grunt 将 .png 转换为 .jpg 文件

  20. 20

    关于将PNG转换为JPG

  21. 21

    Gnome终端的背景透明性

  22. 22

    delphi将gif透明转换为png

  23. 23

    Famo.us-如何创建具有背景不透明性但不具有文本的表面

  24. 24

    将带有TIFF(EPT)的EPS转换为png,并保持透明背景

  25. 25

    在哪里可以找到具有透明性的高分辨率PNG或新版Ubuntu GNOME徽标的矢量版本?

  26. 26

    具有透明背景作为背景的PNG图像的ImageButton

  27. 27

    如何通过转换为PNG从JPEG图像获取透明背景?

  28. 28

    转换为 PNG 时如何使 Vaadin 图表背景透明?

  29. 29

    iOS Objective C将具有透明背景的PNG文件加载到UIImageView

热门标签

归档