最近、私はデータベースから写真を撮るための要件に取り組んでいますが、写真には白い背景があるので、プロジェクトチームは写真の白い背景を削除したいと考えています。
この記事では、参照のためにJavaの写真から白い背景を削除する方法を共有しています。特定のコンテンツは次のとおりです
図に示されているように:
もちろん、これには見えません。実際、最初の写真には白い背景がありますが、2番目の画像は白い背景を持っていません。私が言ったことをあなたが理解していると信じているので、このコードをどのように実装すべきか:
パッケージcom.wdg.util; java.awt.graphics2dをインポートします。 java.awt.imageをインポートします。 java.awt.image.bufferedimageをインポートします。 java.io.bytearrayoutputStreamをインポートします。 java.io.fileをインポートします。 java.io.fileinputStreamをインポートします。 java.io.inputStreamをインポートします。 javax.imageio.imageioをインポートします。 javax.swing.imageiconをインポートします。 public class imageutil {public static void main(string [] args){transferalpha(); } public static byte [] transferalpha(){bytearrayoutputstream bytearrayoutputStream = new bytearrayoutputStream(); file file = new file( "d://08//11.png"); inputstreamは次のとおりです。 try {is = new fileInputStream(file); // MultiPartFileタイプの場合、それをストリームに変換する方法もあります:is = file.getInputStream(); bufferedimage bi = imageio.read(is);画像画像=(画像)bi; 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.getheigh(); j1 ++){for(int j2 = bufferedimage.getminx(); j2 <bufferedimage.getWidth(); j2 ++){int rgb = bufferedimage.getrgb(j2(j1); int r =(rgb&0xff0000)>> 16; int g =(rgb&0xff000)>> 8; int b =(rgb&0xff); if(((255 -r)<30)&&((255 -g)<30)&&((255 -b)<30)){rgb =((alpha + 1)<< 24)| (rgb&0x00ffffff); } bufferedimage.setrgb(j2、j1、rgb); }} g2d.drawimage(bufferedimage、0、0、imageicon.getimageobserver()); Imageio.write(bufferedimage、 "png"、new file( "d://08//12.png")); //直接出力ファイル} catch(例外e){e.printstacktrace(); }最後に{} bytearrayoutputstream.tobytearray()を返します。 }}コードは画像で動作し、それらをコピーすると、関数を直接実装できます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。