1)在 第37行 ,修改 place 参数的值为 法国卢浮宫(可自定义一个地点或者景点)。完成修改,点击 保存 。此步骤是输入增加水印显示的内容。默认图片增加的水印内容为 世界这么大,我想去看看:xxxxxx 。法国卢浮宫(修改的内容)取代 xxxxx 部分的内容。
请将开发服务器桌面的 code.txt 文件中 //设置水印参数 set watermark parameters 部分的代码,拷贝到 WaterMark.java 对应位置中。该段代码功能为:设置水印字体、大小、文字、颜色、位置、透明度并生成进行水印处理后的网站图片的 URI。
//设置水印参数 set watermark parameters String watermark = "watermark=2"; // watermark type, 1=pic mark, 2=text mark; String font_type = "&type=" + BinaryUtil.toBase64String("fangzhengheiti".getBytes()); String size = "&size=" + "30"; String text = "世界那么大, 我想去看看:"+place; text = "&text=" + BinaryUtil.toBase64String(text.getBytes()); String color = "&color=" + BinaryUtil.toBase64String("#FF0033".getBytes()); String position = "&p=" + "4"; String transparency = "&t=" + "70"; watermark = watermark + font_type + size + text + color + position + transparency; String uri_watermark = uri +"@"+ watermark; System.out.println("打水印后图片的URI为: "+ uri_watermark+",请在本地浏览器中访问。 ");
4. 然后,点击顶层功能栏的 运行(第六个按钮),开始运行程序。弹出 Console 的程序运行界面中,若显示如下信息,则完成对网站图片打水印。
打水印后图片的URI为: http://training.jiagouyun.com/世界地图xxxxxxx.jpg@watermark=2&type=ZmFuZ3poZW5naGVpdGk=&size=30&text=5LiW55WM6YKj5LmI5aSnLCDmiJHmg7PljrvnnIvnnIvvvJrms5Xlm73nvZfmta7lrqs=&color=I0ZGMDAzMw==&p=4&t=70,请在本地浏览器中访问。
5. 最后,使用域名访问打水印的网站图片。打开本地浏览器,拷贝并粘贴上一步中 URI 中的内容到 网址输入栏 回车,读取 OSS 中存储处理后的图片。即在原有一张地球仪的图片上,添加红色的水印文字 世界这么大, 我想去看看:法国卢浮宫 。
2.5 网站图片多重处理
- 本部分实验内容:为了能在一次访问中完成对图像的缩略和打文字水印两种处理,使用管道来实现多种处理任务顺序执行的机制。目前最多支持四级管道。管道的分隔符是 | 。
- 首先,通过管道进行图片多重处理:请将开发服务器桌面的 code.txt 文件中 //设置管道参数 set pipe parameters 部分的代码(以下灰色字体)拷贝到 WaterMark.java 对应位置中。该部分代码在一次访问中完成对图像的缩略和打文字水印两种处理。
//设置管道参数 set pipe parameters String pipe=thumbnail+"|"+watermark; String uri_pipe=uri+"@"+pipe; System.out.println("通过管道访问缩略和打水印双重处理后图片的URI为: "+ uri_pipe+",请在本地浏览器中访问。 ");
3. 然后,点击顶层功能栏的 运行(第六个按钮),开始运行程序。弹出 Console 的程序运行界面中,若显示如下信息,则通过管道同时进行图片缩放和水印处理 世界地图 图片文件成功,并生成了相应处理后网站图片的 URI
通过管道访问缩略和打水印双重处理后图片的URI为: http://training.jiagouyun.com/世界地图xxxxxxx.jpg@500w_500h.jpg|watermark=2&type=ZmFuZ3poZW5naGVpdGk=&size=30&text=5LiW55WM6YKj5LmI5aSnLCDmiJHmg7PljrvnnIvnnIvvvJrms5Xlm73nvZfmta7lrqs=&color=I0ZGMDAzMw==&p=4&t=70,本地浏览器中访问。
4. 最后,使用域名访问通过管道多重处理后的网站图片:打开本地浏览器,拷贝并粘贴上一步中 URI 中的内容到 网址输入栏 回车,读取通过管道同时进行缩放和打水印后的图片。即在缩放后的 500*500 的地球仪的图片上,添加红色的水印文字 世界这么大, 我想去看看:法国卢浮宫 。
2.6 下载处理后的图片至本地并查看
本小节主要内容:将上步使用管道对 OSS 的 Bucket 中的原图进行缩放和打水印双重处理后的图片保存到本地。图片服务的下载可以通过浏览器等发送 HTTP GET 请求图片的URL 即可获得图片。
首先,下载处理后的图片至本地。请将开发服务器桌面的 code.txt 文件中 //下载图片 、 //下载文件 部分的代码(以下灰色字体)拷贝到 WaterMark.java 对应位置中。该部分代码将使用管道对 OSS 的 Bucket 中的原图进行缩放,和打水印双重处理后的图片,保存到本地的 C:/LAB_OSS 路径中,并命名为 旅行.jpg 。
注意:%7C 是管道符 | 的转义字符。
//下载图片 String uri_pipe_download=uri+"@"+thumbnail+"%7C"+ watermark;//“%7C”是管道符“|”的转义字符 downloadFile(uri_pipe_download); System.out.println("Finished...");
以上代码中 downloadFile() 的具体实现见如下的 //下载文件 代码。具体通过以下步骤获得处理后的图片,之后存入本地文件:
1)创建 HttpGet 对象,将要请求的 URL 通过构造方法传入 HttpGet 对象。
2)使用 DefaultHttpClient 类的 execute 方法发送 HTTP GET 请求,并返回 HttpResponse 对象。
3)通过 HttpResponse 接口的 getEntity 方法返回响应信息,并以给定的文件名字 旅游.jpg 存为本地文件。
//下载文件 private static void downloadFile(String uri) throws OSSException, ClientException, ClientProtocolException, IOException { //send requests DefaultHttpClient httpClient = new DefaultHttpClient(); HttpResponse response = httpClient.execute(new HttpGet(uri)); System.out.println("开始从OSS下载文件..."); //write to file byte[] result = EntityUtils.toByteArray(response.getEntity()); FileOutputStream fos = new FileOutputStream(new_pic_name); fos.write(result); fos.flush(); System.out.println("下载成功"); }
然后,点击顶层功能栏的 运行(第六个按钮),开始运行程序。弹出 Console 的程序运行界面中,若显示如下信息,则完成下载处理后的图片并保存到本地,其名称为 旅行.jpg 。
最后,在本地查看处理后的图片信息。依次点击 Windows 界面左下角的 开始 ,和点击右侧栏的 计算机 ,在打开的 计算机 窗体下,双击 本地磁盘C:,然后,双击并进入 LAB_OSS 的文件目录下。双击 旅行 图片文件。
在打开的 旅行 图片页面中,可以查看到一张添加红色文字水印的地球仪的图片。证明已成功下载通过 OSS 处理后的 世界地图.jpg 图片,并已将其保存到本地 C:\LAB_OSS中,默认命名为 旅行.jpg 。注意其像素已被缩放至 500*500 像素。