【Java】图像透明渐变融合

    //获取旗帜
        File flag_file=new File("五星红旗.jpg");
        BufferedImage flag_image=ImageIO.read(flag_file);

        //获取头像
        File head_file=new File("1.jpg");
        BufferedImage head_image=ImageIO.read(head_file);

        //求旗帜和头像最小长宽
        int w1=flag_image.getWidth();
        int h1=flag_image.getHeight();
        int w2=head_image.getWidth();
        int h2=head_image.getHeight();
        int w=w1<w2?w1:w2;
        int h=h1<h2?h1:h2;

        //创建输出图像
        File new_file=new File("out.jpg");
        BufferedImage new_image=new BufferedImage(w,h,BufferedImage.TYPE_3BYTE_BGR);
        //创建一个画笔
        Graphics g= new_image.getGraphics();

        //绘制头像
        for(int i=0;i<w;i++){
            for(int j=0;j<h;j++){
                //获取像素点
                int rgb=head_image.getRGB(i,j);
                Color c=new Color(rgb);
                //设置画笔颜色
                g.setColor(c);
                //绘制一个点
                g.drawLine(i,j,i,j);
            }
        }

        //绘制国旗
        for(int i=0;i<w;i++){
            for(int j=0;j<h;j++){
                int rgb=flag_image.getRGB(i, j);
                int rgbs[]=new int[3];
                //分别取RGB
                rgbs[0]=(rgb&0xff0000)>>16;     //R
                rgbs[1]=(rgb&0xff00)>>8;        //G
                rgbs[2]=rgb&0xff;               //B
                int alpha=(int)(255*(1-((float)i/(float)w)));   //透明度
                Color c=new Color(rgbs[0],rgbs[1],rgbs[2],alpha);
                g.setColor(c);
                g.drawLine(i,j,i,j);
            }
        }

        //输出图像
        OutputStream out=new FileOutputStream(new_file);
        ImageIO.write(new_image, "jpg", out);

输入:五星红旗.jpg,1.jpg

在这里插入图片描述

在这里插入图片描述

输出:out.jpg
请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值