From 39bdd025663575088c171651816005c56662dddf Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Thu, 12 Feb 2026 12:08:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(printer):=20=E6=A0=B9=E6=8D=AE=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E6=96=B9=E5=90=91=E6=99=BA=E8=83=BD=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E8=A3=81=E5=89=AA=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在图片裁剪前增加图片方向检测功能 - 当检测到横图时才应用270度旋转裁剪参数 - 添加ImageUtils工具类isLandscape方法判断图片方向 - 完善图片方向检测异常处理和资源清理 - 优化打印服务中图片处理流程的条件判断逻辑 --- .../printer/impl/PrinterServiceImpl.java | 25 ++++++++++++++++--- .../java/com/ycwl/basic/utils/ImageUtils.java | 23 +++++++++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java b/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java index 77eaf189..0fd365b4 100644 --- a/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java @@ -353,6 +353,14 @@ public class PrinterServiceImpl implements PrinterService { log.debug("打印机高度未配置或无效,使用默认值: height={}", printHeight); } + // 检测原图方向 + boolean isLandscape = false; + try { + isLandscape = ImageUtils.isLandscape(url); + } catch (Exception e) { + log.warn("检测图片方向失败,默认为竖图: url={}", url, e); + } + // 使用smartCropAndFill裁剪图片 File croppedFile = ImageUtils.smartCropAndFill(url, printWidth, printHeight); @@ -365,8 +373,9 @@ public class PrinterServiceImpl implements PrinterService { log.info("照片裁剪成功: memberId={}, scenicId={}, 原图={}, 裁剪后={}, 尺寸={}x{}", memberId, scenicId, url, cropUrl, printWidth, printHeight); - String crop = JacksonUtil.toJSONString(new Crop(270)); - entity.setCrop(crop); + if (isLandscape) { + entity.setCrop(JacksonUtil.toJSONString(new Crop(270))); + } } finally { // 清理临时文件 if (croppedFile != null && croppedFile.exists()) { @@ -637,9 +646,19 @@ public class PrinterServiceImpl implements PrinterService { log.debug("打印机高度未配置或无效,使用默认值: height={}", printHeight); } + // 检测原图方向 + boolean isLandscape = false; + try { + isLandscape = ImageUtils.isLandscape(url); + } catch (Exception e) { + log.warn("检测图片方向失败,默认为竖图: url={}", url, e); + } + // 使用smartCropAndFill裁剪图片 File croppedFile = ImageUtils.smartCropAndFill(url, printWidth, printHeight); - entity.setCrop(JacksonUtil.toJSONString(new Crop(270))); + if (isLandscape) { + entity.setCrop(JacksonUtil.toJSONString(new Crop(270))); + } try { // 上传裁剪后的图片 diff --git a/src/main/java/com/ycwl/basic/utils/ImageUtils.java b/src/main/java/com/ycwl/basic/utils/ImageUtils.java index 16718bb2..e7165b04 100644 --- a/src/main/java/com/ycwl/basic/utils/ImageUtils.java +++ b/src/main/java/com/ycwl/basic/utils/ImageUtils.java @@ -101,6 +101,29 @@ public class ImageUtils { } } + /** + * 判断图片是否为横图(宽度大于高度) + * 支持URL字符串或文件路径 + * + * @param imageSource URL字符串或文件路径 + * @return true表示横图,false表示竖图 + * @throws IOException 读取图片失败 + */ + public static boolean isLandscape(String imageSource) throws IOException { + BufferedImage image = null; + try { + image = loadImage(imageSource); + if (image == null) { + throw new IOException("无法读取图片: " + imageSource); + } + return image.getWidth() > image.getHeight(); + } finally { + if (image != null) { + image.flush(); + } + } + } + /** * 旋转图片90度(顺时针) *