- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个图像 (147 KB),我想将其缩小到 100 KB 以下。下面的代码尝试执行此操作,但是当图像在另一侧出现时,宽度和高度会缩小,但图像上的磁盘空间从 147 变为 250!它应该变得更小而不是更高......
你能告诉我为什么这段代码没有这样做吗?
谢谢
//Save image
BufferedImage resizeImagePng = resizeImage(originalImage, type, newLargeImageLocation);
//Resize and save
ImageIO.write(resizeImagePng, "png", new File(newSmallImageLocation));
//Create new image
private static BufferedImage resizeImage(BufferedImage originalImage, int type, String newLargeLocation) throws Exception{
//Get size of image
File file =new File(newLargeLocation);
//File size in KBs
double bytes = file.length();
double kiloBytes = bytes/1024;
double smallWidth = originalImage.getWidth();
double smallHeight = originalImage.getHeight();
double downMult = 1;
//If image is too large downsize to fit the size
if (kiloBytes>MAX_IMAGE_SIZE_IN_KYLOBITES) {
downMult = MAX_IMAGE_SIZE_IN_KYLOBITES/kiloBytes;
smallWidth *= downMult;
smallHeight *= downMult;
}
//Final dimensions
int finalHeight = (int)smallHeight;
int finalWidth = (int)smallWidth;
//Init after
BufferedImage after = new BufferedImage(finalWidth, finalHeight, BufferedImage.TYPE_INT_ARGB);
//Scale
AffineTransform at = new AffineTransform();
at.scale(downMult, downMult);
//Scale op
AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
after = scaleOp.filter(originalImage, after);
//Return after
return after;
}
最佳答案
2 个问题,我也有一个调整大小程序,但我调整图像的大小有点不同:
首先,我从名为“original”的 BufferedImage 对象开始创建一个 Dimension 对象(不是真正需要的,但从设计角度来说似乎更好一些)
final int width = original.getWidth();
final int height = original.getHeight();
final Dimension d = new Dimension(width, height);
就我而言,这与文件大小无关,而是与最大宽度和/或高度有关,因此,在不深入细节的情况下,我根据上面创建的对象计算一个新的 Dimension 对象。新的 Dimension 对象称为“缩放”。
这就是我获取新的缩放缓冲图像的方法:
public BufferedImage resizeExact(final BufferedImage original, final Dimension scaled, final Dimension offset) {
final Image newImage = original.getScaledInstance(scaled.width, scaled.height, Image.SCALE_SMOOTH);
final BufferedImage bufferedImage = new BufferedImage(newImage.getWidth(null),
newImage.getHeight(null),
BufferedImage.TYPE_INT_BGR);
bufferedImage.createGraphics().drawImage(newImage, offset.width, offset.height, null);
return bufferedImage;
}
使用此代码,我获得一个名为 resizedImage 的 BufferedImage,需要将其写入 OutputStream 输出,为此我使用此代码:
ImageIO.write(resized, "jpg", out);
out.close();
这里我讨论第二个问题:我使用标准 ImageIO 类将 BufferedImage 编写为 jpeg 文件。这里的问题是 JPEG 编码器通常使用压缩因子,因子越高,生成的文件越小,但生成的文件的质量损失越大。该代码使用默认的压缩系数 70%。这很适合我。但是,如果您想更改此设置,此引用文献解释了如何执行此操作:Setting jpg compression level with ImageIO in Java 。请注意,此处将其更改为 100% 本质上是较低的压缩系数。
您的代码片段没有显示您最终如何创建 jpeg 文件(我假设您也使用 jpeg)。如果你的原始图像被压缩,比如说40%的比例(不太可能,因为那样你会得到一个糟糕的图像,我假设)所以未jpeged你有100%,如果你想将文件大小减少到80%,你就减少图像大小到 80%,如果您随后使用 70% 压缩系数对其进行压缩,您的最终结果将约为 56%,这比 40% 更大。
希望这有帮助。但是,如果您指定如何编写 jeg 图像(可能使用 javax.imageio 标准之外的其他库),则可能有另一种方法来指定压缩因子。
关于java - 使 bufferedImage 变小的代码出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18496187/
我将尝试借助图片来解释我的问题: 首先,我刚刚向我的 UIViewController 添加了一个 UITableView。我选择它来显示它的框架,没有问题。 接下来,当我将按钮连接到 UIViewC
当我打开侧边栏时,我的背部 Activity 应该变小,我该如何实现? 最佳答案 嘿,你也可以为较小的 Activity 提供最佳效果。检查ResideMenu 库演示。非常适合您的回答 关于andr
我正在尝试以编程方式创建一个 TableView 单元格原型(prototype)(类似于下面的原型(prototype))。 设计了具有两个堆栈 View 的单元格, a) 包含文本标签的垂直堆栈
如何让td(highlighted)变小?我尝试将 witdh 设置为等于 50px 但不能显示更小的宽度 最佳答案 由于您使用的是表格,因此如果您希望整列为 50px,则需要将每一行中的每个 td
似乎在 UIWebView 上使用 sizeToFit() 不会将大小更改为更小,只会更大。这是一些设置代码: var scrollView: UIScrollView! var webView: U
我们发现了 iPhone 渲染斜体标签的问题。当为它定义的 font-family 不同于其父级的 font-family 时,斜体文本呈现的比它应该的小得多。该问题似乎并未出现在所有 iOS 设备上
我创建了一个具有以下特征的 AVD:目标:Android Honeycomb(API 级 Honeycomb)SD卡大小:64M皮肤:内置 WXVGA 但问题是,当我运行这个 ADV 时,它的尺寸比我
是否可以在 Activity xml 中使默认的 TimePicker 更小?我已经搜索过这个但到目前为止只发现了如何创建一个我不想做的自定义时间选择器,或者创建一个我也不想做的弹出窗口。有没有人
UIRefreshControl 使用非常大的微调器: 我想调整它的大小(微调器的框架,而不是下拉长度!)看起来更像这样: 我在 the reference docs 中看不到任何内容关于如何做到这一
我想在打开Navigation Drawer时让我的后台Activity变小一点,模拟Airbnb应用中存在的效果.我想最好的解释是截图: 但重点不是让View只是变小,而是让它成为一个与Drawer
我开发的其中一个网站有点问题。这个问题很简单,但是解决方案似乎有点难。 问题 问题是页面最初在移动设备上呈现时应该呈现的样子,但在页面加载完成后,页面会立即调整大小以适合视口(viewport)。没什
我有一个简单的水平 LinearLayout,里面有四个相同样式的 TextView。当 TextView 中的文本需要两行时,TextView 变小: 我不明白为什么。有人可以帮忙吗? 谢谢 布局
我需要一些建议来构建一个好的模型来使用 Collaborative Filtering 进行推荐。的 Spark 。 official website中有示例代码.我还通过了以下内容: from py
这里我有一个用于输入区域的简单的 buildPanel 方法。我尝试使用 GridLayout(7,1),但前 4 个 JTextField 似乎填满了其 block 的整个空间,看起来相当难看。 有
需要明确的是:我知道如何更改文本的大小,我想更改文本的粗细而不更改字体。这可能吗? 下面的代码是使“文本”一词出现在 Canvas 中间的基本代码。我需要更改或添加什么才能使文本厚度变薄? funct
我是 iOS 的初学者,所以我不确定要在这里研究什么。我有一个添加了几个方形 subview 的 UIScrollView。如何让 subview 在滚动出屏幕时变小,在接近屏幕中心时变大? #imp
我正在开发一个 Angular 应用程序,我需要对一个选择元素进行模式验证。仅在 select 上使用 ng-pattern 是行不通的。所以我在隐藏输入上创建了一个具有相同模型和 ng-patter
我在“语言页面”上有 3 个 ImageButton,代表应用程序 (Android) 的 3 种不同语言。
我得到的 CoordinatorLayout 的结构类似于: ... ... almost all elemen
我刚开始在我的 android 应用程序中使用 Snackbar,但我无法将 ScrollView 缩小到不覆盖 ScrollView 内部的任何内容。 这是我的 Activity 的 xml 布局:
我是一名优秀的程序员,十分优秀!