当前位置: 首页 > news >正文

家用电脑可以做网站吗网站定制哪家比较好

家用电脑可以做网站吗,网站定制哪家比较好,凡客之家,福田瑞沃es3故障灯图解今天干了一件特别不务正业的事#xff0c;做了一个小程序用来给图片添加水印。事情的起因是需要将自己的身份证照片分享给别人#xff0c;手边并没有一个趁手的工具来生成图片水印。很多APP提供了水印的功能#xff0c;但会把我的图片上传到他们的服务器#xff0c;身份证太…今天干了一件特别不务正业的事做了一个小程序用来给图片添加水印。事情的起因是需要将自己的身份证照片分享给别人手边并没有一个趁手的工具来生成图片水印。很多APP提供了水印的功能但会把我的图片上传到他们的服务器身份证太敏感了显然我并不想让别人有机会保留照片。 我把图片处理做了一个抽象入参是BufferedImage对图片添加水印、盲印、隐式写入后返回新的BufferedImage作为结果。 package org.keyniu.watermark.image;import java.awt.image.BufferedImage;public interface ImageProcess {/*** param org* return*/public BufferedImage process(BufferedImage org) throws Exception;} 1. 基本实现 我们先给出一版基本的实现 package org.keyniu.watermark.image;... /*** 基于JDK的Graphics2D实现*/ public class Graphics2DWatermark implements ImageProcess {... public BufferedImage process(BufferedImage org) throws UnsupportedEncodingException, NoSuchAlgorithmException {BufferedImage marked new BufferedImage(org.getWidth(), org.getHeight(), BufferedImage.TYPE_INT_RGB);Graphics2D g2d marked.createGraphics();g2d.drawImage(org, 0, 0, null); // 创建结果图片并绘制原图// 设置字体计算每个水印文字的块大小FontRenderContext context g2d.getFontRenderContext();Font font new Font(fontName, Font.BOLD, fontSize);g2d.setFont(font);TextMetadata textMeta getTextMetadata(font, context, text);// 设置水印透明度默认选择45°g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); // 设置透明度0.0~1.0g2d.rotate(Math.PI * rotateArch / 180, org.getWidth() / 2, org.getHeight() / 2);// 计算图片中每行能放几个水印要放多少行ImageMetadata imageMeta new ImageMetadata(org.getWidth(), org.getHeight());int columnCount imageMeta.getColumnCount(textMeta.getWidth());int rowCount imageMeta.getRowCount(textMeta.getHeight() textMeta.getCrcHeight());AffineTransform transform g2d.getTransform();for (int rIdx 0; rIdx rowCount; rIdx) {for (int cIdx 0; cIdx columnCount; cIdx) {g2d.setTransform(transform);randomRotate(g2d, imageMeta);randomTransform(g2d);watermark(g2d, imageMeta, textMeta, rIdx, cIdx);}}g2d.setTransform(transform);// 结束绘制释放资源g2d.dispose();return marked;}private void watermark(Graphics2D g2d, ImageMetadata imageMeta, TextMetadata textMeta, int rIdx, int cIdx) {Point offset imageMeta.getOffset();Point textLoc textMeta.textLocation(rIdx, cIdx);Point crcLoc textMeta.crcLocation(rIdx, cIdx);randomGradient(g2d, offset.x textLoc.x, offset.y textLoc.y, textMeta.totalTextWidth(), textMeta.totalTextHeight());g2d.drawString(textMeta.getText(), offset.x textLoc.x, offset.y textLoc.y);randomGradient(g2d, offset.x crcLoc.x, offset.y crcLoc.y, textMeta.totalCrcWidth(), textMeta.totalCrcHeight());g2d.drawString(textMeta.getCrc(), offset.x crcLoc.x, offset.y crcLoc.y);}protected void randomRotate(Graphics2D g2d, ImageMetadata imageMeta) { // 供子类覆盖自定义旋转的逻辑}protected void randomTransform(Graphics2D g2d) { // 供子类覆盖自定义AffineTransform的逻辑}protected void randomGradient(Graphics2D g2d, int x, int y, int dx, int dy) { // 供子类覆盖实现渐变色的逻辑}... }本地main方法测试测试代码是这样的的。 public static void main(String[] args) throws Exception {Graphics2DWatermark watermark new Graphics2DWatermark(仅用于车险办理);BufferedImage image ImageIO.read(new File(D:\\blog\\linux.png));BufferedImage certified watermark.process(image);ImageIO.write(certified, jpg, new File(D:\\blog\\linux_mark.png)); } 左边是原始图片右边是加了水印后的图片 2. 旋转变换 太有规律的水印很容易就被擦除水印上面的实现中我们预留了3个接口用来扩展实现分别是: randomRotate输出一行水印之前有机会做旋转randomTransform输出一行水印前有机会执行AffineTransfromrandomGradient输出水印文字和CRC之前有机会设置渐变色 我们提供了一个增强实现 public class EnhancedGraphics2DWatermark extends Graphics2DWatermark {public EnhancedGraphics2DWatermark(String text) {super(text);}protected void randomRotate(Graphics2D g2d, ImageMetadata imageMeta) {g2d.rotate(Math.PI * (Math.random() * 45 - 45) / 180, imageMeta.getSourceX(), imageMeta.getSourceY());}Overrideprotected void randomTransform(Graphics2D g2d) {if (Math.random() 0.5) {g2d.shear(Math.random() * 0.2, 0);} else {g2d.shear(0, Math.random() * 0.2);}}protected void randomGradient(Graphics2D g2d, int fx, int fy, int tx, int ty) {Color from generateColor();Color to reverse(from);GradientPaint gp new GradientPaint(fx, fy, from, tx, ty, to);g2d.setPaint(gp);}private Color generateColor() {int r (int) (256 * Math.random() fontColor.getRed()) 0xFF;int g (int) (256 * Math.random() fontColor.getGreen()) 0xFF;int b (int) (256 * Math.random() fontColor.getBlue()) 0xFF;return new Color(r, g, b);}private Color reverse(Color c) {return new Color((256 - c.getRed()) 0xFF, (256 - c.getGreen()) 0xFF, (256 - c.getBlue()) 0XFF, c.getAlpha());}} 修改测试的main方法改用这个实现 public static void main(String[] args) throws Exception {Graphics2DWatermark watermark new EnhancedGraphics2DWatermark(仅用于车险办理);BufferedImage image ImageIO.read(new File(D:\\blog\\linux.png));BufferedImage certified watermark.process(image);ImageIO.write(certified, jpg, new File(D:\\blog\\linux_mark.png)); } 这是新的水印效果 3. 提供GUI访问 直接通过代码来调用对非程序来说太有友好了所以我在上一篇的基础上做了一点点改成做了一个GUI入口通过菜单设置水印的文案 然后再使用JFileChooser打开一个图片文件最终展示水印后的图片。 完整的项目代码见附件如果使用GraalVM打包称为可执行文件就可以分享给你的小伙伴们使用啦。
http://www.w-s-a.com/news/509430/

相关文章:

  • 漯河网站开发运营seo是什么意思
  • 网站建设的征求意见稿iis 网站 红
  • 网站搭建教室企业网站开发实训心得
  • 阿克苏建设网站佛山app定制
  • 做淘宝网站要求与想法大型网站建设推荐
  • 在百度做网站赚钱吗跨境电商网站开发
  • 酒店网站建设策划方案南昌网站建设南昌
  • 临沂罗庄做网站房产cms
  • 五合一网站做优化好用吗网站设计的专业流程
  • 毕业设计论文网站开发需要多少网站seo建设方案
  • h5页面用什么做杭州优化外包哪里好
  • 许昌网站建设百姓国货app下载
  • 什么是建站装修公司做宣传在哪个网站
  • 阿里云虚拟主机多个网站吗大庆油田建设集团网站
  • 坂田公司做网站公司有网站域名后如何建网站
  • 自媒体网站程序淘宝网站维护
  • 凡科网站建设网站wordpress 七牛oss
  • 搬瓦工的主机可以用来做网站吗分类信息网站开发需求方案
  • 上海高端网站开发站霸网络国际网站建设的目的
  • 程序员招聘求职的网站做网站加入广告联盟
  • 网站建设的技术方案模板易做文学网站的logo
  • 建设国家标准官方网站响应式网站切图
  • 网站链接数怎么做wordpress安装网址
  • 沈阳建网站 哪家好如何做旅游网站推销
  • 继续网站建设南通网站建设方法
  • 淮南公司网站建设如果做京东优惠卷的网站
  • 二手房网站平台怎么做项目工程监理公司网站建设方案
  • 秦皇岛做网站公司小说推广平台有哪些
  • php网站做分享到朋友圈天元建设集团有限公司信用代码
  • 邱县做网站在线免费图片编辑器