mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
fix methods
This commit is contained in:
parent
b286f3743d
commit
7cbba42e94
@ -22,14 +22,12 @@ import java.awt.Point;
|
|||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import java.awt.RenderingHints;
|
import java.awt.RenderingHints;
|
||||||
import java.awt.Stroke;
|
import java.awt.Stroke;
|
||||||
import java.awt.Toolkit;
|
|
||||||
import java.awt.color.ColorSpace;
|
import java.awt.color.ColorSpace;
|
||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.geom.Ellipse2D;
|
import java.awt.geom.Ellipse2D;
|
||||||
import java.awt.geom.RoundRectangle2D;
|
import java.awt.geom.RoundRectangle2D;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.awt.image.CropImageFilter;
|
import java.awt.image.CropImageFilter;
|
||||||
import java.awt.image.FilteredImageSource;
|
|
||||||
import java.awt.image.ImageFilter;
|
import java.awt.image.ImageFilter;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -271,10 +269,11 @@ public class Img implements Serializable {
|
|||||||
scaleType = Image.SCALE_DEFAULT;
|
scaleType = Image.SCALE_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
double sx = NumberUtil.div(width, srcWidth);
|
|
||||||
double sy = NumberUtil.div(height, srcHeight);
|
|
||||||
|
|
||||||
if (ImgUtil.IMAGE_TYPE_PNG.equals(this.targetImageType)) {
|
if (ImgUtil.IMAGE_TYPE_PNG.equals(this.targetImageType)) {
|
||||||
|
// png特殊处理,借助AffineTransform可以实现透明度保留
|
||||||
|
final double sx = NumberUtil.div(width, srcWidth);// 宽度缩放比
|
||||||
|
final double sy = NumberUtil.div(height, srcHeight); // 高度缩放比
|
||||||
this.targetImage = ImgUtil.transform(AffineTransform.getScaleInstance(sx, sy),
|
this.targetImage = ImgUtil.transform(AffineTransform.getScaleInstance(sx, sy),
|
||||||
ImgUtil.toBufferedImage(srcImg, this.targetImageType));
|
ImgUtil.toBufferedImage(srcImg, this.targetImageType));
|
||||||
} else {
|
} else {
|
||||||
@ -345,7 +344,7 @@ public class Img implements Serializable {
|
|||||||
fixRectangle(rectangle, srcImage.getWidth(null), srcImage.getHeight(null));
|
fixRectangle(rectangle, srcImage.getWidth(null), srcImage.getHeight(null));
|
||||||
|
|
||||||
final ImageFilter cropFilter = new CropImageFilter(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
|
final ImageFilter cropFilter = new CropImageFilter(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
|
||||||
this.targetImage = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(srcImage.getSource(), cropFilter));
|
this.targetImage = ImgUtil.filter(cropFilter, srcImage);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -420,7 +419,7 @@ public class Img implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 彩色转为黑白
|
* 彩色转为灰度
|
||||||
*
|
*
|
||||||
* @return this
|
* @return this
|
||||||
*/
|
*/
|
||||||
@ -440,8 +439,7 @@ public class Img implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 给图片添加文字水印<br>
|
* 给图片添加文字水印
|
||||||
* 此方法并不关闭流
|
|
||||||
*
|
*
|
||||||
* @param pressText 水印文字
|
* @param pressText 水印文字
|
||||||
* @param color 水印的字体颜色
|
* @param color 水印的字体颜色
|
||||||
@ -602,11 +600,12 @@ public class Img implements Serializable {
|
|||||||
* @return 处理过的图片
|
* @return 处理过的图片
|
||||||
*/
|
*/
|
||||||
public Image getImg() {
|
public Image getImg() {
|
||||||
return null == this.targetImage ? this.srcImage : this.targetImage;
|
return getValidSrcImg();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 写出图像
|
* 写出图像为结果设置格式<br>
|
||||||
|
* 结果类型设定见{@link #setTargetImageType(String)}
|
||||||
*
|
*
|
||||||
* @param out 写出到的目标流
|
* @param out 写出到的目标流
|
||||||
* @return 是否成功写出,如果返回false表示未找到合适的Writer
|
* @return 是否成功写出,如果返回false表示未找到合适的Writer
|
||||||
@ -617,7 +616,8 @@ public class Img implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 写出图像为PNG格式
|
* 写出图像为结果设置格式<br>
|
||||||
|
* 结果类型设定见{@link #setTargetImageType(String)}
|
||||||
*
|
*
|
||||||
* @param targetImageStream 写出到的目标流
|
* @param targetImageStream 写出到的目标流
|
||||||
* @return 是否成功写出,如果返回false表示未找到合适的Writer
|
* @return 是否成功写出,如果返回false表示未找到合适的Writer
|
||||||
@ -667,7 +667,7 @@ public class Img implements Serializable {
|
|||||||
*
|
*
|
||||||
* @param backgroundImg 背景图片
|
* @param backgroundImg 背景图片
|
||||||
* @param img 要绘制的图片
|
* @param img 要绘制的图片
|
||||||
* @param rectangle 矩形对象,表示矩形区域的x,y,width,height,x,y从背景图片中心计算
|
* @param rectangle 矩形对象,表示矩形区域的x,y,width,height,x,y从背景图片中心计算(如果positionBaseCentre为true)
|
||||||
* @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
|
* @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
|
||||||
* @return 绘制后的背景
|
* @return 绘制后的背景
|
||||||
*/
|
*/
|
||||||
@ -675,13 +675,7 @@ public class Img implements Serializable {
|
|||||||
final Graphics2D g = backgroundImg.createGraphics();
|
final Graphics2D g = backgroundImg.createGraphics();
|
||||||
GraphicsUtil.setAlpha(g, alpha);
|
GraphicsUtil.setAlpha(g, alpha);
|
||||||
|
|
||||||
Point point;
|
fixRectangle(rectangle, backgroundImg.getWidth(), backgroundImg.getHeight());
|
||||||
if (positionBaseCentre) {
|
|
||||||
point = ImgUtil.getPointBaseCentre(rectangle, backgroundImg.getWidth(), backgroundImg.getHeight());
|
|
||||||
} else {
|
|
||||||
point = new Point(rectangle.x, rectangle.y);
|
|
||||||
}
|
|
||||||
rectangle.setLocation(point.x, point.y);
|
|
||||||
GraphicsUtil.drawImg(g, img, rectangle);
|
GraphicsUtil.drawImg(g, img, rectangle);
|
||||||
|
|
||||||
g.dispose();
|
g.dispose();
|
||||||
@ -725,7 +719,8 @@ public class Img implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修正矩形框位置,如果{@link Img#setPositionBaseCentre(boolean)} 设为{@code true},则坐标修正为基于图形中心,否则基于左上角
|
* 修正矩形框位置,如果{@link Img#setPositionBaseCentre(boolean)} 设为{@code true},<br>
|
||||||
|
* 则坐标修正为基于图形中心,否则基于左上角
|
||||||
*
|
*
|
||||||
* @param rectangle 矩形
|
* @param rectangle 矩形
|
||||||
* @param baseWidth 参考宽
|
* @param baseWidth 参考宽
|
||||||
@ -735,11 +730,9 @@ public class Img implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Rectangle fixRectangle(Rectangle rectangle, int baseWidth, int baseHeight) {
|
private Rectangle fixRectangle(Rectangle rectangle, int baseWidth, int baseHeight) {
|
||||||
if (this.positionBaseCentre) {
|
if (this.positionBaseCentre) {
|
||||||
|
final Point pointBaseCentre = ImgUtil.getPointBaseCentre(rectangle, baseWidth, baseHeight);
|
||||||
// 修正图片位置从背景的中心计算
|
// 修正图片位置从背景的中心计算
|
||||||
rectangle.setLocation(//
|
rectangle.setLocation(pointBaseCentre.x, pointBaseCentre.y);
|
||||||
rectangle.x + (Math.abs(baseWidth - rectangle.width) / 2), //
|
|
||||||
rectangle.y + (Math.abs(baseHeight - rectangle.height) / 2)//
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return rectangle;
|
return rectangle;
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,8 @@ import java.awt.image.BufferedImage;
|
|||||||
import java.awt.image.BufferedImageOp;
|
import java.awt.image.BufferedImageOp;
|
||||||
import java.awt.image.ColorConvertOp;
|
import java.awt.image.ColorConvertOp;
|
||||||
import java.awt.image.ColorModel;
|
import java.awt.image.ColorModel;
|
||||||
|
import java.awt.image.FilteredImageSource;
|
||||||
|
import java.awt.image.ImageFilter;
|
||||||
import java.awt.image.RenderedImage;
|
import java.awt.image.RenderedImage;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
@ -2190,4 +2192,17 @@ public class ImgUtil {
|
|||||||
public static BufferedImage filter(BufferedImageOp op, BufferedImage image) {
|
public static BufferedImage filter(BufferedImageOp op, BufferedImage image) {
|
||||||
return op.filter(image, null);
|
return op.filter(image, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 图片滤镜,借助 {@link ImageFilter}实现,实现不同的图片滤镜
|
||||||
|
*
|
||||||
|
* @param filter 滤镜实现
|
||||||
|
* @param image 图片
|
||||||
|
* @return 滤镜后的图片
|
||||||
|
* @since 5.7.8
|
||||||
|
*/
|
||||||
|
public static Image filter(ImageFilter filter, Image image){
|
||||||
|
return Toolkit.getDefaultToolkit().createImage(
|
||||||
|
new FilteredImageSource(image.getSource(), filter));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user