是否有任何方法或外部库可以使用Lanczos(理想情况下)或至少bicubic alg 调整图像大小.Android下?(当然更快更好,但质量优先,处理时间次要)
我到目前为止所做的一切都是这样的:
Bitmap resized = Bitmap.createScaledBitmap(yourBitmap, newWidth, newHeight, true);
Run Code Online (Sandbox Code Playgroud)
然而,它使用双线性滤波器,输出质量很差.特别是如果你想保留细节(如细线或可读文本).
有许多优秀的Java库,例如这里讨论的: Java - 调整图像大小而不会降低质量
但是它总是依赖于Java awt类java.awt.image.BufferedImage,所以它不能在Android中使用.
有没有办法如何更改Bitmap.createScaledBitmap()方法或某些库中的默认(双线性)过滤器,如Morten Nobel的lib,它能够与android.graphics.Bitmap类一起工作(或者有一些原始表示,如评论中指出的@Tron)?
我正在尝试使用Java和Scalr 3.2创建此图像的高质量缩略图

这是相关的源代码,其中THUMB_WIDTH = 77和THUMB_HEIGHT = 57
BufferedImage srcImg = ImageIO.read(new File(sourceFile));
BufferedImage dstImg = Scalr.resize(srcImg, Scalr.Method.QUALITY,
THUMB_WIDTH, THUMB_HEIGHT);
ImageIO.write(dstImg, format, new File(destFile));
Run Code Online (Sandbox Code Playgroud)
如果我使用format = "png",结果如下:

如果我使用format = "jpg",结果如下:

通过imagemagick识别,我发现JPEG的质量保存为75,完全不足以创建美观的缩略图.PNG对我来说也不好看.
以下是原始文件的标识输出和两个缩略图:
$ identify 42486_1.jpg 42486_s1.jpg 42486_s1.png
42486_1.jpg JPEG 580x435 580x435+0+0 8-bit DirectClass 50.6KB 0.000u 0:00.000
42486_s1.jpg[1] JPEG 77x58 77x58+0+0 8-bit DirectClass 2.22KB 0.000u 0:00.000
42486_s1.png[2] PNG 77x58 77x58+0+0 8-bit DirectClass 12.2KB 0.000u 0:00.000
Run Code Online (Sandbox Code Playgroud)
您好我有QR码图像,我想调整大小,当我尝试使用此代码将其调整为小图像时,我总是得到一个blury图像,当我扫描它时QR码不再有效,但是当我使用相同的代码调整大尺寸图像时,它工作正常:
public BufferedImage getScaledInstance(BufferedImage img,
int targetWidth,
int targetHeight,
Object hint,
boolean higherQuality)
{
int type = (img.getTransparency() == Transparency.OPAQUE) ?
BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB;
BufferedImage ret = (BufferedImage)img;
int w, h;
if (higherQuality) {
// Use multi-step technique: start with original size, then
// scale down in multiple passes with drawImage()
// until the target size is reached
w = img.getWidth();
h = img.getHeight();
} else {
// Use one-step technique: scale directly from original
// size to target size …Run Code Online (Sandbox Code Playgroud) 我有一个开源应用程序,可以将照片上传到Facebook.为了节省带宽,照片会在上传前自动调整大小(Facebook规定了最大大小限制).有些人抱怨照片质量,事实上你可以看到差异(对于一些演示图像,请参阅此问题).
所以我的问题是,在不降低质量的情况下缩小Java中的图像(即照片)的"最佳"方法是什么,或者至少在质量损失/伪影最小的情况下?
我用这个代码调整了两个因素的图像大小.它有效,但调整大小后图像质量非常糟糕!你能帮助我吗?
这是代码
public class ImageTest {
private static final int factor1 = 3;
private static final int factor2 = 4;
public static void main(String [] args){
JFileChooser cs = new JFileChooser();
cs.setFileSelectionMode(cs.DIRECTORIES_ONLY);
int i = cs.showOpenDialog(null);
if(i==cs.APPROVE_OPTION){
File f = cs.getSelectedFile();
File[] ff = f.listFiles();
for(int j=0;j<ff.length;j++){
String end = ff[j].getName().substring(ff[j].getName().indexOf(".")+1);
System.out.println(end);
try{
BufferedImage originalImage = ImageIO.read(ff[j]);
int type = originalImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
BufferedImage resizeImageJpg = resizeImageWithHint(originalImage, type);
ImageIO.write(resizeImageJpg, end, new File("pr/"+ff[j].getName()));
}catch(IOException e){
e.printStackTrace();
}
} …Run Code Online (Sandbox Code Playgroud) int width = 175;
Graphics2D gb = (Graphics2D) g;
bufferedimage = (BufferedImage) createImage(width, width);
Graphics2D graphics = bufferedimage.createGraphics();
graphics.setColor(/*this.getBackground()*/Color.red);
graphics.fillRect(0, 0, width, width);
Run Code Online (Sandbox Code Playgroud)
嗨,我有缓冲大尺寸...我必须调整缓冲图像... PLZ你能帮助我吗?
我正在尝试使用Image Voodoo插件在JRuby/Rails应用程序中为上传的图像创建缩略图 - 问题是调整大小的缩略图看起来像......屁股.
似乎生成缩略图的代码绝对正确地将插值渲染提示设置为"bicubic",但是它并没有在我们的开发环境(OS X)或生产Web服务器(Linux)上表现出来. .
我已经提取出代码来生成缩略图,将其重写为直接的Java应用程序(即从main()方法启动),插值呈现提示明确设置为"bicubic",并且已经复制了(缺少)双三次和双线性调整大小.
正如在OS X和Linux上所预期的那样,拇指缩略是丑陋且像素化的,但在Windows上,它使用双三次插值很好地调整了图像的大小.
是否有任何JVM环境设置和/或其他库,我缺少使其工作?对于这个,我正在做很多撞墙的事.
我的要求是:"如何在不失去挥杆质量的情况下调整图像大小".
我正在使用缩放器组件,标签,面板.我正在使用调整大小的概念此时图像模糊并失去质量.那么你是否知道"如何在不失去使用摇摆概念的质量的情况下调整图像大小?".发给我相关信息或代码.
谢谢你,GaneshKumar.