当前位置: 首页 > 知识库问答 >
问题:

用Java缩放图像

勾通
2023-03-14
public double ratioDPI() {
    int ratio = 0;
    int minimal_dpi = 300;
    int dpi = ERXProperties.intForKey("dpi.image");
    return ratio = (dpi/minimal_dpi);
}

public BufferedImage rescale(BufferedImage img) {
    int width_img = img.getWidth();
    int height_img = img.getHeight();
    double factor_width = ERXProperties.doubleForKey("factor.size.width.image.republique.francaise");
    double factor_height = ERXProperties.doubleForKey("factor.size.height.image.republique.francaise");
    return (BufferedImage) img.getScaledInstance((int)(width_img*ratio), (int)(height_img*ratio), BufferedImage.SCALE_SMOOTH);
}

共有1个答案

羊慈
2023-03-14

如果您更改了图像的DPI,例如,您在将其输出到打印机时更改了大小。如果您将DPI从300增加到600,输出中的图像只占一半的宽度和一半的高度。如果你现在调整图片大小,它只会占用更多的内存,图片的质量不会更好。

对于缩放,最好使用affineTransform,这样您就可以过滤图像bilinear,这样像素化就不会那么明显了:

缩放函数:

public static BufferedImage scale(BufferedImage source, double scale, boolean bilinearFiltering){
    try{
        BufferedImage destination = new BufferedImage((int)(source.getWidth() * scale), (int)(source.getHeight() * scale), source.getType());
        AffineTransform at = new AffineTransform();
        at.scale(scale, scale);
        AffineTransformOp scaleOp = new AffineTransformOp(at, getInterpolationType(bilinearFiltering));
        return scaleOp.filter(source, destination);
        }
    catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

private static int getInterpolationType(boolean bilinearFiltering){
    return bilinearFiltering ? AffineTransformOp.TYPE_BILINEAR : AffineTransformOp.TYPE_NEAREST_NEIGHBOR;
}
 类似资料:
  • 图表缩放指的是局部放大或缩小图表,可以更方便的查看图表数据。 Highcharts支持两种方式缩放,缩放(zoom)和平移(panning), 并且是完美支持移动端手势操作的 。 一、缩放(zoom) 只需要简单设置 zoomType 即可实现图表缩放,例如: $("#container").highcharts({ chart: { zoomType: 'x' } // ..

  • 实际上,我正在用JavaFX编写游戏《暗黑破坏神》的“简单”版本。 目前,屏幕尺寸为绝对800x600,一切正常。现在我们的团队希望在每个桌面上使用全屏。 我的问题是:我们正在使用绝对尺寸为25x25的墙、地板等图像。如果我们想在全屏模式下工作,我们需要扩展它们。 但据我所知,您只能缩放ImageView或BufferedImage。当然,我们正在重复使用图像。例如,一个墙壁纹理在窗格上出现了20

  • 问题内容: 我想更改多页TIFF图像的高度,所以我在下面的代码段中进行缩放。但是它仅从tiff文件返回第一页,我想它会将其转换为JPEG图像。如何保留文件的所有页面? 更新的代码: 问题答案: 只会写入单个独立映像。将多个图像写入同一输出流并不能解决此问题。但是,ImageIO软件包完全支持您所需的内容,只需要更多代码即可。 使用以下命令获取适用于TIFF格式的格式: 有关更多信息,请参见Imag

  • 我有不同维度的文档图像,我希望能够有效地缩放和旋转他们在以下方式(标准的“旋转”和“缩放”逻辑)。我怎么做? 一幅图像是H像素高,W像素宽。最初,它应该缩放到600像素宽。在每次旋转时,面板的宽度和高度应该互换,缩放图像应该旋转90度。在每次缩放时,图像应按因子“比例”缩放。 以下是我到目前为止在...得到的BufferedImage会缩放和旋转,但不会平移(旋转90度后位于面板顶部的中心):

  • 以下是CardView的XML代码: 我尝试对ImageView(和LinearLayout)的属性使用wrap_content,并尝试包含属性android: caleType="fitXY",但它没有帮助,似乎没有任何效果。 谁能帮我一下吗?我非常感谢您的每一句评论,也非常感谢您的帮助。

  •        地图缩放调整方法:设置-实验室(可参考10.1)-测地图缩放        将缩放比例调整好后,重新启动外业精灵即可展示修改后的缩放效果。