- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个用 Java(Spring、Hibernate/JPA、Struts2)编写的 Web 应用程序,用户可以在其中上传图像并将它们存储在文件系统中。我想缩放这些图像,以便它们在网站上显示时大小一致。哪些库或内置函数会提供最好的结果?在做出决定时,我会考虑以下标准(按此顺序):
最佳答案
我真的建议您看一下 imgscalr。
它是根据 Apache 2 许可证发布的,托管在 GitHub 上,已经部署在少数 Web 应用程序中,有一个非常简单但文档化的 API,有代码可以解决 JDK 中的 2 个主要图像错误,透明地为您提供,只有当您突然开始“变黑”时,您才会注意到"缩放操作后的图像或可怕的结果,为您提供 Java 中可用的最佳外观结果,可通过 Maven 和 ZIP 获得,并且只是一个类。
基本用法如下所示:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, 320);
这是最简单的调用,库将对质量进行最佳猜测,遵守您的图像比例,并将结果放入 320x320 边界框内。请注意,边界框只是使用的最大 W/H,因为您的图像比例得到尊重,生成的图像仍会接受这一比例,比如 320x200。
如果你想覆盖自动模式并强制它给你最好看的结果,甚至对结果应用非常温和的抗锯齿过滤器以使其看起来更好(特别适合缩略图),该调用将看起来像:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, Method.QUALITY,
150, 100, Scalr.OP_ANTIALIAS);
这些都只是示例,API 范围广泛,涵盖了从 super 简单的用例到非常专业的所有用例。您甚至可以传入自己的 BufferedImageOps 以应用于图像(库会自动为您修复 6 年的 BufferedImageOp JDK 错误!)
要在 Java 中成功缩放图像,比库为您做的要多得多,例如,在对图像进行操作时始终将图像保持为最受支持的 RGB 或 ARGB 图像类型之一。在幕后,如果用于任何图像操作的图像类型不受支持,Java2D 图像处理管道会退回到劣质软件管道。
如果这一切听起来很令人头疼,那有点……这就是我编写库并将其开源的原因,这样人们就可以调整图像大小并继续他们的生活,而无需担心
希望对您有所帮助。
关于java - 在 Java 中缩放图像的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/816548/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!