图片打水印 缩放 和一个输入流的转换

图片打水印 缩放 和一个输入流的转换

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

图片打水印和缩放:

 public final static BufferedImage[] pressImage(InputStream srcImg, String waterImg,float alpha) throws IOException {
    	
    	 //File file = new File(targetImg);
        Image image = ImageIO.read(srcImg);
        int width = image.getWidth(null);
        int height = image.getHeight(null);
        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bufferedImage.createGraphics();
        g.drawImage(image, 0, 0, width, height, null);
    
        Image waterImage = ImageIO.read(new File(waterImg));    // 水印文件
        
        int width_1 = waterImage.getWidth(null);
        int height_1 = waterImage.getHeight(null);
        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
        
        int div=(int) (0.1*width_1);
          
        for(int y=0,row=0;y<height;y+=height_1+div,row++)
        {
        	int x=0;
        	       	
            for(;x<width;x+=width_1+div)
            {              	
            	g.drawImage(waterImage, x, y, width_1, height_1, null); // 水印文件结束	                	
            }
        }             
        
        g.dispose();
        
        BufferedImage bufferedImage2=Thumbnails.of(bufferedImage).size(100, 100).asBufferedImage();
        
       
      
       return new BufferedImage[]{bufferedImage,bufferedImage2};
    	
    }

图片的缩放使用了Thumbnails这个工具,(事实上它也能够用来打水印的,只是我还没有研究)

jar 包或者maven 请自行搜索

须要特别注意的是 Thumbnails 默认是依照等比例进行缩放的而且它的缩放规则是:

如果 把图片所放到 200*300

* 若图片横比200小。高比300小。不变
* 若图片横比200小,高比300大。高缩小到300,图片比例不变
* 若图片横比200大,高比300小。横缩小到200。图片比例不变
* 若图片横比200大,高比300大。图片按比例缩小,横为200或高为300

bufferInage转换 inputSteam

private InputStream getInputstreamFromBufferedImage(BufferedImage img) throws IOException{
		 	ByteArrayOutputStream bs =new ByteArrayOutputStream();
		 	ImageOutputStream imOut =ImageIO.createImageOutputStream(bs);
	        ImageIO.write(img,"jpg",imOut); //scaledImage1为BufferedImage,jpg为图像的类型
	        
	        InputStream is =new ByteArrayInputStream(bs.toByteArray());
	        return is;
		
	}

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116890.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 非极大值抑制(NMS)讲解

    非极大值抑制(NMS)讲解非极大值抑制 Non maximumsuppr NMS 是一种去除非极大值的算法 常用于计算机视觉中的边缘检测 物体识别等 算法流程 给出一张图片和上面许多物体检测的候选框 即每个框可能都代表某种物体 但是这些框很可能有互相重叠的部分 我们要做的就是只保留最优的框 假设有 N 个框 每个框被分类器计算得到的分数为 Si 1 lt i lt N 0 建造一个存放待处理候选框的集合 H

    2025年9月7日
    3
  • PostgreSQL row number

    PostgreSQL row number作者:moocbaby(handan)日期:2019-01-19标签:postgreSQL,rownumberPosrgreSQLrownumber查询语句如下:Selectrow_number()over()fromtable_name;或者Selectrow_number()over(orderbyt.adesc)fromfromtab…

    2022年6月11日
    45
  • 原码补码相互转换[通俗易懂]

    原码补码相互转换[通俗易懂]1.基础概念原码:为十进制数的二进制表示,正数符号位为0,负数符号位为1例如:10的二进制为00001010,-10的二进制为10001010补码:为原码的计算码,通俗的讲,计算的时候用补码,看大小的时候用原码2.原码转换成补码正数原码转补码:正数的补码,与原码相同例如,10的原码为00001010,补码也是00001010负数原码转补码:负数的补码:符号位不变,其余各位按位取反,取反后整体加1例如:-10的原码为10001010…

    2025年7月4日
    3
  • laravel实现第三方登录(qq登录)

    laravel实现第三方登录(qq登录)

    2021年10月25日
    57
  • 基于struct2完整的用户登录

    基于struct2完整的用户登录

    2022年1月3日
    38
  • Linux resize2fs命令扩展文件系统出错[通俗易懂]

    Linux resize2fs命令扩展文件系统出错[通俗易懂]sudoresize2fs/dev/nvme0n1p1原因:Linux不同文件系统格式的文件需要使用不同命令查询文件系统格式df-T-h #列出文件系统格式扩展分区文件系统sudoxfs_growfs/dev/nvme0n1p1 #注意分区名要写对分区文件系统扩容完成…

    2022年10月21日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号