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

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

大家好,又见面了,我是全栈君,今天给大家准备了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;
		
	}

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 404页面的制作教程「建议收藏」

    404页面的制作教程「建议收藏」近期发现很多让做SEO诊断的网站一些最基础的操作都没有做,比如首选域确定及301设置、robots.txt文件没有写、404页面没有制作及设置等。前面两项在网上信息最多,这次主要说下404页面的问题。404页面的作用是什么?404页面是为了在用户属于错误URL或网页文件被删除时提醒用户的页面,页面中可以设置网站导航、背景颜色或图片的普通网页。为的是用户没有访问到正常页面时可以…

  • Unity 协程

    Unity 协程协程前言调用方式停止方式yiledreturn语句执行时机WaitForSeconds(floatTime)WaitForSecondsRealtime(floattime)WaitForEndOfFrame()WaitForFixedUpdate()WaitUntil(Funcpredicate)WaitWhile(Funcpredicate)实现自定义函数实际开发中使用建议前言协程是unity提供的一个特殊的机制,他的特点就是可以方便的实现流程化的东西。但是就他的效率而言个人感觉并不乐观,

  • C语言中字符数组初始化的几种方法「建议收藏」

    C语言中字符数组初始化的几种方法「建议收藏」1.C语言中的字符数组初始化在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。1.1直接逐个初始化字符数组:字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。charstrr[]={‘I’,”,’a’,’m’,”,’h’,’a’,’p’,’p’,’y’};注意:如果花括号中提供的字符个数大于数组长度…

  • kettle环境搭建_kettle配置文件在哪

    kettle环境搭建_kettle配置文件在哪kettle工具环境配置欢迎使用Markdown编辑器kettle的配置Java环境配置欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。kettle的配置地址:https://sourceforge.net/projects/penta…

    2022年10月16日
  • adb安装教程(详细)

    adb安装教程(详细)adb安装适用系统安装包安装教程适用系统windows安装包adb官网下载:https://developer.android.com/studio/releases/platform-tools.htm:百度网盘安装包地址:链接:https://pan.baidu.com/s/1FCCnZuL3LuRbyS-zOfUgDQ提取码:zvv5安装教程解压安装包(1)可将安装包解压到电脑的任一路径下(最好不是C盘)添加路径到环境变量下(1)添加的路径:打开adb文件夹,

  • workflow开发_php工作流引擎

    workflow开发_php工作流引擎给大家介绍一款.net流程引擎WikeFlow.微软官方的WorkFlow入门要求比较高,所以我们萌生了开发一个简单的工作流引擎,帮助.Netcoder们解决软件项目中流程的处理。实现写最少的代码,实现最炫酷的功能。WikeFlow官网:www.wikesoft.cnWikeFlow演示地址:workflow.wikesoft.com流程设计器实际运用…

    2022年10月20日

发表回复

您的电子邮箱地址不会被公开。

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