基于Graphics2D drawImage图片失真的解决方案

目录
  • Graphics2D drawImage图片失真的解决
    • 常规的写法
    • 优化的写法
  • Graphics2D 图片合成、图片处理需注意的细节及踩过的坑
    • 图片处理
    • 字体处理

Graphics2D drawImage图片失真的解决

常规的写法

graphics.drawImage(originalBufferedImage, rectangle.x,
rectangle.y,
rectangle.width, rectangle.height, null);

优化的写法

graphics.drawImage(
originalBufferedImage.getScaledInstance(rectangle.width,
rectangle.height, Image.SCALE_SMOOTH),
rectangle.x, rectangle.y, null);

Graphics2D 图片合成、图片处理需注意的细节及踩过的坑

Graphics2D 2d https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics2D.html

图片处理

首先画布肯定是需要的,可以新建一个空白画布,也可以以图片做画布。

BufferedImage  bi = new BufferedImage(width,height,type);
2d = bi.createGraphics();

如果需要生成RGB格式,需要做如下配置

bi = 2d.getDeviceConfiguration().createCompatibleImage(width,height,Transparency.TRANSLUCENT);

注:参数width 和 height 要和是前面画布的对应。

Transparency透明度设置

画图 g.drawImage(img,x,y,width,hight);

注:参数x,y为图片左上角坐标

旋转处理 AffineTransform atf.rotate(theta,x,y)

注:theta这儿的角度需要转换成弧度数

x,y为旋转中心坐标,图片旋转参考点为图片的中心点

同时有偏移、缩放、旋转操作时,画图顺序为:缩放-->偏移-->旋转

图片抗锯齿设置

2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALAS_ON);

image = image.getScaledInstance(width,height,BufferedImage.SCALE_SMOOTH)
g.drawImage(image,x,y,observer)

字体处理

Graphics2D 处理字体的做法和处理图片的大体一致

1、最需要注意的一点就是 在画字体的时候 x,y坐标为字体左左左左下角

2、旋转中心可以通过获取字体的行高和字字符串宽度对应的api计算获得

3、最好用同一包中的字体ttf。如果混用,图片在处理缩放时会存在差异,即使用的字体类型、大小、样式都一致,同样可能会存在差异

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 微信小程序canvas.drawImage完全显示图片问题的解决

    问题描述 问题产生 对于微信小程序,canvas处理过程中,dramImage默认图片引用是有残缺的 导入初始项目 打开链接(原官网例子),浏览器唤醒微信开发这工具,打开连接之前需要下载好微信开发者工具,如已安装则直接唤起,没有则会提示下载 目的 通过对canvas绘图过程的修改,或者其样式的修改,达到完全显示,并自适应不同机型的目的 解决方案 准备工作 Page({ data:{ imgSrc: '', // 需要处理图片地址 imgW: '', // canvas 宽度 imgH: '',

  • 基于Graphics2D drawImage图片失真的解决方案

    目录 Graphics2D drawImage图片失真的解决 常规的写法 优化的写法 Graphics2D 图片合成.图片处理需注意的细节及踩过的坑 图片处理 字体处理 Graphics2D drawImage图片失真的解决 常规的写法 graphics.drawImage(originalBufferedImage, rectangle.x, rectangle.y, rectangle.width, rectangle.height, null); 优化的写法 graphics.drawIm

  • cropper js基于vue的图片裁剪上传功能的实现代码

    前些日子做了一个项目关于vue项目需要头像裁剪上传功能,看了一篇文章,在此基础上做的修改完成了这个功能,与大家分享一下.原文:http://www.jb51.net/article/135719.htm 首先下载引入cropper js, npm install cropper js --save 在需要的页面引入:import Cropper from "cropper js" html的代码如下: <template> <div id="demo&quo

  • java 使用Graphics2D在图片上写字

    目录 使用Graphics2D在图片上写字 Graphics2D 的使用 1.Graphics2D和Graphics的区别 2.setRenderingHint的具体用处 3.Stroke的使用方法 使用Graphics2D在图片上写字 首先jsp页面:src是一个方法地址 然后在Controller如下:写一个生成方法,用流进行读写 生成方法,(关键): 注意:这种方法可行,但是需要计算文字的位置,感觉不太灵活,如果谁有更好的方法请分享一下. Graphics2D 的使用 1.Graphics

  • 基于C#实现图片滑动验证码的示例代码

    目录 图片准备 合成目标 实现 1.创建项目 2.Nuget添加ImageSharp 3.vscode打开 4.引入图片 5.生成out_bg.jpg 6.生成out_slider.png 全部代码 最后 图片准备 hole.png和slider.png为png是因为图片带有透明度. 合成目标 最终为前端生成两张图片: out_slider.png高度为344与背景图等高. 也可以打开滑动验证Demo页面,F12来观察图片. 实现 本机环境为.net 6.0.300-preview.22204.

  • 基于JavaScript实现图片裁剪功能

    目录 一.图片文件的上传和读取 二.图片展示和蒙层处理 CSS clip-path 三.裁剪框展示 裁剪框的缩放点 cursor 鼠标样式 四.裁剪框移动事件 五.裁剪框缩放操作 六.完成裁剪功能 drawImage 后记 在前端开发中,当遇到图片或头像上传等功能时,有尺寸分辨率限制的话,就需要用到图片的裁剪功能.想了解图片基础知识的,可见前文图片基础知识介绍. 而canvas的使用,对于我们直接在web端实现图片裁剪功能成为可能.本文将使用前端技术实现一个图片的裁剪功能. 一.图片文件的上传和

  • 基于jQuery实现图片推拉门动画效果的两种方法

    ''推拉门''动效也可以称作"手风琴"效果,大多数效果实现的思路基本是一样的,下面介绍两种方法,一种是通过改变图片的偏移位置实现移动,另一种是通过遍历背景图片后改变图片的宽度实现变换. 实现方法一:改变图片宽度 html+css代码 <body> <div class="box"> <ul> <!-- <li>![](images/slidepic2.jpg)</li> --> <li&g

  • 基于JavaScript实现图片剪切效果

    学会如何获取鼠标的坐标位置以及监听鼠标的按下.拖动.松开等动作事件,从而实现拖动鼠标来改变图片大小. 还可以学习css中的clip属性. 一.CSS实现图片不透明及裁剪效果. 图片剪切三层结构 1.第一层opacity,给图层设置透明度 2.第二层clip,clip属性:对图片进行裁剪,实现图像的一部分显示,其他部分进行隐藏 3.第三层选取框absolute(与第二层重叠的),包括八个触点的效果 html代码: <div id="box"> <img src=&quo

  • php基于base64解码图片与加密图片还原实例

    本文实例讲述了php基于base64解码图片与加密图片还原的实现方法.分享给大家供大家参考.具体实现方法如下: 本例中$data是一段经过base64编码的图片.具体代码如下: 复制代码 代码如下: <?php //文件名:base64.php $data="/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ

  • Python基于pygame实现图片代替鼠标移动效果

    本文实例讲述了Python基于pygame实现图片代替鼠标移动效果.分享给大家供大家参考,具体如下: 想想现在学校pygame有几个钟了,就写了一个小程序:图片代替鼠标移动 程序的运行效果: 当鼠标移动到窗口内,鼠标不见了,取而代之的是图片..... 代码部分如下: #pygame first program import pygame from pygame.locals import * from sys import exit __author__ = {'name' : 'Hongten

  • Android基于SoftReference缓存图片的方法

    本文实例讲述了Android基于SoftReference缓存图片的方法.分享给大家供大家参考,具体如下: Java中的SoftReference即对象的软引用.如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它:如果内存空间不足了,就会回收这些对象的内存.只要垃圾回收器没有回收它,该对象就可以被程序使用.软引用可用来实现内存敏感的高速缓存.使用软引用能防止内存泄露,增强程序的健壮性. SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃

随机推荐