linux加水印乱码,图片加水印信息处理及中文乱码解决

2024-01-22 18:20

本文主要是介绍linux加水印乱码,图片加水印信息处理及中文乱码解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一,准备步骤

1.1 原图:D:\文件表\9252150_092049419327_2.jpg

3bf07e4920bbff80ae83fd95d543eb8f.png

1.2 logo图片:D:\文件表\img\生物质燃烧.png

c4cb9c256ccf0fc184c973ffc209de6b.png

二,源码

根据自己的需要适当调整

1 /**2 *3 * @param srcImgPath 原图片的路径4 * @param tarImgPath 新图片的路径5 * @param Content1 水印的内容16 * @param logoImg logo图片路径7 * @param Content2 水印的内容28 */

9 public voidmark(String srcImgPath,String tarImgPath,String Content1,String logoImg,String Content2) {10 try{11

12 /*// 打开服务器图片路径13 URL url = new URL(srcImgPath);14 URLConnection connection = url.openConnection();15 // 通过输入流获取图片数据16 InputStream is = connection.getInputStream();17 BufferedImage srcImg = ImageIO.read(is);*/

18

19 Image srcImg = ImageIO.read(new File(srcImgPath));//图片来源是本地路径的读取20 //获取原始图片的宽和高

21 int srcImgwidth = srcImg.getWidth(null);22 int srcImgheight = srcImg.getHeight(null);23

24 //画水印需要一个画板 创建一个画板

25 BufferedImage buffImg = newBufferedImage(srcImgwidth,srcImgheight,BufferedImage.TYPE_INT_RGB);26 //创建一个2D的图像

27 Graphics2D g =buffImg.createGraphics();28 //画出来

29 g.drawImage(srcImg, 0, 0, srcImgwidth, srcImgheight,null);30

31 //黑色

32 g.setColor(Color.BLACK);33 //1.0f为透明度 ,值从0-1.0,依次变得不透明

34 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.3f));35 //画图层

36 g.fillRect(srcImgwidth-230,srcImgheight-410, 200, 310);37

38 //白色

39 g.setColor(Color.WHITE);40 //设置画笔的宽度. 越大,边框越粗

41 g.setStroke(newBasicStroke(2F));42 //设置线条透明度 ,值从0-1.0,依次变得不透明

43 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));44 //画矩形

45 g.drawRect(srcImgwidth-215, srcImgheight-395, 170, 280);46

47 //设置水印的字体样式

48 Font font = new Font("微软雅黑", Font.PLAIN, 20);49 g.setFont(font);50 //根据获取的坐标 在相应的位置画出水印

51 g.drawString("林格曼黑度:",srcImgwidth-200, srcImgheight-360);52

53 //设置水印的字体样式

54 Font fonts = new Font("微软雅黑", Font.PLAIN, 30);55 g.setFont(fonts);56 //根据获取的坐标 在相应的位置画出水印

57 g.drawString("3级",srcImgwidth-100, srcImgheight-355);58

59

60 //设置水印的字体样式

61 Font font1 = new Font("微软雅黑", Font.BOLD, 34);62 g.setFont(font1);63 //根据获取的坐标 在相应的位置画出水印

64 g.drawString(Content1,srcImgwidth-205, srcImgheight-310);65

66

67 //设置水印的字体样式

68 Font font2 = new Font("微软雅黑", Font.PLAIN, 20);69 g.setFont(font2);70 //根据获取的坐标 在相应的位置画出水印

71 g.drawString("区域实时AQI",srcImgwidth-190, srcImgheight-190);72

73 //设置水印的字体样式

74 Font font3 = new Font("微软雅黑", Font.PLAIN, 60);75 g.setFont(font3);76 //根据获取的坐标 在相应的位置画出水印

77 g.drawString(Content2,srcImgwidth-180, srcImgheight-130);78

79 //水印logo图象的路径 水印一般为gif或者png的,这样可设置透明度

80 ImageIcon imgIcon = newImageIcon(logoImg);81 //得到Image对象。

82 Image img =imgIcon.getImage();83 //透明度

84 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP));85 //表示水印图片的位置

86 g.drawImage(img, srcImgwidth-160, srcImgheight-290,imgIcon.getIconWidth()/2,imgIcon.getIconHeight()/2, null);87 //g.drawImage(img.getScaledInstance(450,300,Image.SCALE_SMOOTH), 40, 450, this);88 //释放画板的资源

89 g.dispose();90

91 //输出新的图片

92 FileOutputStream outputStream = newFileOutputStream(tarImgPath);93

94 //创建新的图片

95 ImageIO.write(buffImg, "png", outputStream);96 System.out.println("水印添加完成!");97

98 //刷新流

99 outputStream.flush();100 //关闭流

101 outputStream.close();102

103 } catch(IOException e) {104 e.printStackTrace();105 }106 }

1 public static voidmain(String[] args) throws FileNotFoundException, URISyntaxException {2 long startTime =System.currentTimeMillis();3 //log图片位置

4 String logo ="D:\文件表\img\生物质燃烧.png";5

6 //原图1,服务器图片7 //String srcImgPath ="http://xxx.xxx.xxxx.xxx:8080/20191015/D54088974/111.53.146.19_01_20191015102934821_FIRE_SOURCE_DETECTION.jpg";8 //原图2,本地图片

9 String srcImgPath ="D:\文件表\9252150_092049419327_2.jpg";10 //加水印后图片位置

11 String tarImgPath = "D:\文件表\生物质燃烧.jpg";12 String Content1 = "工业烟羽";13 String Content2 = "122";14 //原图位置, 输出图片位置, 水印文字颜色, 水印文字

15 newWaterMarkUtils().myuanark(srcImgPath, tarImgPath,Content1,logo,Content2);16 long endTime =System.currentTimeMillis();17 System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间

18 }

三,运行结果:

15722b316892580f437aece6aa8d13dd.png

打开本地位置:D:\文件表\生物质燃烧.jpg

0a568d38555dfec7d5736219043147b6.png

四.乱码解决

4.1 以上代码在本地win10运行一切正常,把代码布置到linux上跑出的图片如下,中文部分会乱码

7428084d679570982700b828ede0e583.png

4.2 原因出在这里,我们设置的字体类型是“微软雅黑”,而微软雅黑字体,找不到对应的字库,所以中文会乱码,

c7cae7cf4ea5f3768f4ee7474c3ad2ca.png

4.3  解决办法:

4.3.1 在c:/windows/fonts 文件夹下找到对应的字体,

78145f23b8ac9412036ef94bb1917e79.png

4.3.2  进入jdk的字体库

cd /usr/share/fonts/

4.3.3 在此路径下建文件/chinese

mkdir chinese

e3dd150067d1f89e1e14ae22f051d6bf.png

4.3.4 把以上需要的字体库拷入/usr/share/fonts/chinese

a9c9e4b905fb94b51edc49908500e328.png

mkfontscale

mkfontdir

mkfontscale和mkfontdir这两个命令在有些服务器中会出现command not fount问题,这需要对命令进行安装,具体可以通过百度这两个命令查看yum安装的命令。

4.3.5  执行命令,fc-cache扫描字体目录并生成字体信息的缓存,然后应用程序就可以立即使用这些新安装的字体。

fc-cache -fv //刷新系统字体缓存即刻生效

d0d4a99226dd5e52a21e1f7e4b4a4a4c.png

4.3.6 检查字体是否添加成功

fc-list | grep 雅黑

57f9c22ec624706e18f1d7836aac18a2.png

4.3.7 最后重新启动需要用到这个字体的项目

de5f56c513f667ff157a5f0bfb7f50f5.png

这篇关于linux加水印乱码,图片加水印信息处理及中文乱码解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/633832

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境