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.RenderingHints;
|
||||
import java.awt.Stroke;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.color.ColorSpace;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.Ellipse2D;
|
||||
import java.awt.geom.RoundRectangle2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.CropImageFilter;
|
||||
import java.awt.image.FilteredImageSource;
|
||||
import java.awt.image.ImageFilter;
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
@ -271,10 +269,11 @@ public class Img implements Serializable {
|
||||
scaleType = Image.SCALE_DEFAULT;
|
||||
}
|
||||
|
||||
double sx = NumberUtil.div(width, srcWidth);
|
||||
double sy = NumberUtil.div(height, srcHeight);
|
||||
|
||||
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),
|
||||
ImgUtil.toBufferedImage(srcImg, this.targetImageType));
|
||||
} else {
|
||||
@ -345,7 +344,7 @@ public class Img implements Serializable {
|
||||
fixRectangle(rectangle, srcImage.getWidth(null), srcImage.getHeight(null));
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@ -420,7 +419,7 @@ public class Img implements Serializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* 彩色转为黑白
|
||||
* 彩色转为灰度
|
||||
*
|
||||
* @return this
|
||||
*/
|
||||
@ -440,8 +439,7 @@ public class Img implements Serializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* 给图片添加文字水印<br>
|
||||
* 此方法并不关闭流
|
||||
* 给图片添加文字水印
|
||||
*
|
||||
* @param pressText 水印文字
|
||||
* @param color 水印的字体颜色
|
||||
@ -602,11 +600,12 @@ public class Img implements Serializable {
|
||||
* @return 处理过的图片
|
||||
*/
|
||||
public Image getImg() {
|
||||
return null == this.targetImage ? this.srcImage : this.targetImage;
|
||||
return getValidSrcImg();
|
||||
}
|
||||
|
||||
/**
|
||||
* 写出图像
|
||||
* 写出图像为结果设置格式<br>
|
||||
* 结果类型设定见{@link #setTargetImageType(String)}
|
||||
*
|
||||
* @param out 写出到的目标流
|
||||
* @return 是否成功写出,如果返回false表示未找到合适的Writer
|
||||
@ -617,7 +616,8 @@ public class Img implements Serializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* 写出图像为PNG格式
|
||||
* 写出图像为结果设置格式<br>
|
||||
* 结果类型设定见{@link #setTargetImageType(String)}
|
||||
*
|
||||
* @param targetImageStream 写出到的目标流
|
||||
* @return 是否成功写出,如果返回false表示未找到合适的Writer
|
||||
@ -667,7 +667,7 @@ public class Img implements Serializable {
|
||||
*
|
||||
* @param backgroundImg 背景图片
|
||||
* @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] 之内(包含边界值)的一个浮点数字
|
||||
* @return 绘制后的背景
|
||||
*/
|
||||
@ -675,13 +675,7 @@ public class Img implements Serializable {
|
||||
final Graphics2D g = backgroundImg.createGraphics();
|
||||
GraphicsUtil.setAlpha(g, alpha);
|
||||
|
||||
Point point;
|
||||
if (positionBaseCentre) {
|
||||
point = ImgUtil.getPointBaseCentre(rectangle, backgroundImg.getWidth(), backgroundImg.getHeight());
|
||||
} else {
|
||||
point = new Point(rectangle.x, rectangle.y);
|
||||
}
|
||||
rectangle.setLocation(point.x, point.y);
|
||||
fixRectangle(rectangle, backgroundImg.getWidth(), backgroundImg.getHeight());
|
||||
GraphicsUtil.drawImg(g, img, rectangle);
|
||||
|
||||
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 baseWidth 参考宽
|
||||
@ -735,11 +730,9 @@ public class Img implements Serializable {
|
||||
*/
|
||||
private Rectangle fixRectangle(Rectangle rectangle, int baseWidth, int baseHeight) {
|
||||
if (this.positionBaseCentre) {
|
||||
final Point pointBaseCentre = ImgUtil.getPointBaseCentre(rectangle, baseWidth, baseHeight);
|
||||
// 修正图片位置从背景的中心计算
|
||||
rectangle.setLocation(//
|
||||
rectangle.x + (Math.abs(baseWidth - rectangle.width) / 2), //
|
||||
rectangle.y + (Math.abs(baseHeight - rectangle.height) / 2)//
|
||||
);
|
||||
rectangle.setLocation(pointBaseCentre.x, pointBaseCentre.y);
|
||||
}
|
||||
return rectangle;
|
||||
}
|
||||
|
@ -39,6 +39,8 @@ import java.awt.image.BufferedImage;
|
||||
import java.awt.image.BufferedImageOp;
|
||||
import java.awt.image.ColorConvertOp;
|
||||
import java.awt.image.ColorModel;
|
||||
import java.awt.image.FilteredImageSource;
|
||||
import java.awt.image.ImageFilter;
|
||||
import java.awt.image.RenderedImage;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@ -2190,4 +2192,17 @@ public class ImgUtil {
|
||||
public static BufferedImage filter(BufferedImageOp op, BufferedImage image) {
|
||||
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