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度(顺时针) *