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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MuseMailServer采用数据库作为基本数据的存储载体,支持多语言、远程管理、Webmail(AJAX PHP)、互联网邮件收发、(POP3,SMTP,IMAP,FTP)、数字水印/SSL密、网络硬盘、邮件过滤、邮件监控、任务事件、反垃圾邮件,邮件杀病毒、多域名邮件收发和邮件发送验证等功能,是公司,企事业单位和学校以及门户网站等的理想的邮件服务器软件。MuseMailServer以其设置简单,简捷易用,出色的稳定性和灵活的web邮件服务二次开发接口为用户的商务应用、办公应用、学习提供更好,更容易,更快捷的支持。 MuseMailServer从3.0版本开始,改变原有的基于文件型数据库的存储方式,采用易检索、高速度、数据备份、安全性和灵活性上更具效率的数据库。以适应日新月异的数字存储数据库化和海量数据存储的要求。和传统邮件服务器一样,MuseMailServer支持互联网邮件收发、网页邮件收发、邮件杀毒、智能邮件过滤、邮件监视、邮件备份、邮件转发、多域名邮件收发和邮件发送验证等功能。同时,由于内核基于数据库,MuseMailServer提供的内核和Webmail无论是速度效率还是安全性都有传统邮件服务器无法比拟的优势。开放式的COMAPI和数据库结构,支持存储过程和视图,这对大部分数据库维护人员和开发人员来说,他们可以对MuseMailServer自行定义和并在其之上进行集成和二次开发,使得MuseMailServer的灵活性在同类产品中更胜一筹。 在邮件系统最重要的人机交互界面—Webmail中,MuseMail应用先进的AJAX动态页面无刷新技术,采用当前最为流行的PHP语言,以插件和模块化多层设计模式实现,并且严格遵循W3C国际标准,以UTF-8的全球通用字符集为界面字符内码标准,使得系统在具备完美可操作性、人性化快捷处理界面的同时,能最大程度上满足不同语种和多语言字符Email同时存在的需求,最大程度上满足用户的各种需求。 邮件服务器软件中重要的一个部分就是邮件存储模块,该部分直接决定邮件服务器的性能和效率,MuseMailServer从3.0版本开始采用分开存储的方式,将邮件系统的用户信息和其他基本信息都存放到数据库中,而数据量比较大的信体数据采用文件方式进行存储.这样的设计方式大大提升了系统可支持的邮箱数量和性能,同时又缓解了数据库服务器的压力.对于服务器负载比较大和邮件数据比较多的情况,MuseMailServer还可以被部署成分布式模式,WEBMAIL和邮件存储以及内核都分别采用不同的服务器进行处理,这样将能成倍提升服务器性能和邮件系统的容量。 MuseMail Server邮件服务器软件 v5.2 更新内容: 1.在MIME组件中增了获取附件编码类型的方法,修复了webmail中某些附件编码为qp时不能正常下载 的问题; 2.增了地址簿信息,用户信息读取返回时的长度,修复了显示数据内容时乱码的问题; 3.修改了DNS缓存的自动清理模式,改为由MX记录属性值自动判断超时更新的方式,提升了邮件发送的 成功率; 4.webmail中个人配置中的发件人名称长度改成了最多可输入8个汉字; 5.完善了网络磁盘中的子目录的分页功能; 6.改善了webmail界面的操作友好性,如发邮件时信体中提到"附件"而没有时会自动提示用户应该添 附件; 7.修复了在webmail审核注册用户时因名字过长导致乱码的问题; 8.修复了个性签名乱码的问题; 9.增了用户是否允许发送给外部(非本域)邮件的权限,让管理员能更灵活的对用户进行权限控制;
使用Linux平台上的Java编程语言实现给图片上文字水印,将中文文字展示为方框形状的步骤如下: 1. 首先,确保系统环境中已经安装了Java开发工具(JDK)和相关的库文件。 2. 在Java代码中引入相关的图像处理库,例如Java提供的AWT和Java 2D库。 3. 载待添水印图片文件。可以使用Java IO库中的相关类,如ImageIO类,来读取和处理图片文件。 4. 创建一个新的图片对象,以便在其上添水印。可以使用BufferedImage类来创建一个空白的图片对象,并设置其大小和颜色模式。 5. 根据读取的图片文件,将其内容绘制到新的图片对象中。可以使用Java 2D库中的Graphics类和Graphics2D类来实现这一步骤。 6. 设计一个方框形状的中文水印。可以通过Java的字体相关类(如Font、FontMetrics等)来设置合适的字体样式和字号,并计算文字的宽度和高度。 7. 在新的图片对象的指定坐标位置上绘制方框形状的中文水印。可以使用Java 2D库中的绘图方法,如drawRect()函数绘制方框的边框,fillRect()函数填充方框的内部,以及drawString()函数绘制中文文字。 8. 最后,将新生成的带有水印图片保存到文件中。可以使用ImageIO类中的write()函数将图片对象保存为指定的格式(如JPEG、PNG等)的文件。 通过以上步骤,就可以在Linux平台上使用Java编程实现给图片上中文方框水印的功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值