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

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

大家好,又见面了,我是全栈君,今天给大家准备了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)
上一篇 2022年1月13日 下午6:00
下一篇 2022年1月13日 下午7:00


相关推荐

  • 降维算法:主成分分析 VS 自动编码器

    降维算法:主成分分析 VS 自动编码器降维是一种减少特征空间维度以获得稳定的、统计上可靠的机器学习模型的技术。降维主要有两种途径:特征选择和特征变换。特征选择通过选择重要程度最高的若干特征,移除共性的或者重要程度较低的特征。特征转换也称为特征提取,试图将高维数据投影到低维空间。一些特征转换技术有主成分分析(PCA)、矩阵分解、自动编码器(Autoencoders)、t-Sne、UMAP等。本文主要介绍了主成分分析以及自动编码器两种方法,具体分析两者的优缺点,并且通过一个生动的示例进行详解。主成分分析主成分分析是一种无监督技术,将原始数

    2022年5月27日
    39
  • AI名片制作指南:大佬都在用,这个提示词让你轻松搞定

    AI名片制作指南:大佬都在用,这个提示词让你轻松搞定

    2026年3月15日
    2
  • mysql 1396_Mysql ERROR 1396 (HY000) 错误的解决办法「建议收藏」

    mysql 1396_Mysql ERROR 1396 (HY000) 错误的解决办法「建议收藏」建立用户的时候报告这个错误:ERROR1396(HY000):OperationCREATEUSERfailedfor’abc’@’localhost’原因是mysql中已经有了这个用户,从mysql.user中直接删除delete,然后刷新权限FLUSHPRIVILEGES,再建用户就不会有这个问题了。如果是dropuser的话,mysql内部会自动刷新一下,那么再建也不会…

    2022年8月12日
    8
  • js数组遍历和对象遍历

    js数组遍历和对象遍历js 数组遍历和对象遍历 js 数组遍历和对象遍历 js 循环的几种方式 1 普通 for 循环 vararr 1 2 3 4 for vari 0 i

    2026年3月26日
    1
  • 工具类之Python编译器Pycharm添加解释器

    工具类之Python编译器Pycharm添加解释器工具类之 Python 编译器 Pycharm 添加解释器连接远程服务器 1 点击左上角的 file 右键选择 setting 找到 projectinter 点击 showall 2 点击 号新增解释器 找到 sshinterpret 输入 host 服务器地址 port 端口号 username 用户名 点击 next 输入 password 密码 添加解释器注意 这里的服务器是已经安装了 Python 或 anaconda 的哦 1 选择远程解释器路径 一般在 root

    2026年3月27日
    4
  • 阿里云申请免费ssl证书及安装_申请免费ssl证书

    阿里云申请免费ssl证书及安装_申请免费ssl证书本文参考以下文章并整理:阿里云SSL证书免费申请方法(图文教程)藏羚骸的博客~阿里云SSL证书部署(DigiCert免费版SSL)2022阿里云免费SSL证书品牌为DigiCertDV单域名证书,每个阿里云账号可以申请20个免费SSL证书资源包,SSL证书大全图文详解阿里云SSL证书免费申请和部署教程,包括SSL证书申请域名DNS验证等操作。阿里云DigiCert免费版SSL有效期一年,过期后需要重新部署SSL。所以,不管是第一次部署SSL还是刚接手公司项目SSL就到期的小伙伴都可

    2022年10月3日
    4

发表回复

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

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