Image 播放框架:上传后如何调整图像大小并转换为JPG图像
以下代码段将上载的图像保存在数据库中:Image 播放框架:上传后如何调整图像大小并转换为JPG图像,image,scala,playframework,Image,Scala,Playframework,以下代码段将上载的图像保存在数据库中: object MyController extends Controller { def upload = Action(multipartFormDataAsBytes) { request => request.body.files foreach { case FilePart(key, filename, contentType, bytes) => ... // store file
object MyController extends Controller {
def upload = Action(multipartFormDataAsBytes) { request =>
request.body.files foreach {
case FilePart(key, filename, contentType, bytes) =>
...
// store file in MongoDB GridFS
...
}
Ok("done")
}
}
字节
包含要保存在数据库中的上载图像。。。但在实际保存之前,我需要:
谢谢。您指向的库与Java使用的类配合使用,这些类可以将图像保存为JPEG格式 根据,您只需执行以下操作:
val input = new ByteArrayInputStream(bytes)
val image: BufferedImage = ImageIO.read(input)
val resizedImage: BufferedImage = // do imgscalr scaling magic
val outFile = new File("/my/file/location/file.jpg")
ImageIO.write(resizedImage, "jpg", outFile)
您指向的库与Java使用的类一起工作,Java使用的类可以将图像保存为JPEG格式 根据,您只需执行以下操作:
val input = new ByteArrayInputStream(bytes)
val image: BufferedImage = ImageIO.read(input)
val resizedImage: BufferedImage = // do imgscalr scaling magic
val outFile = new File("/my/file/location/file.jpg")
ImageIO.write(resizedImage, "jpg", outFile)
使用JAI(Java Advanced Imaging),您可以重新缩放找到其编解码器的任何媒体格式。我们将其与PNG、JPEG、GIF和TIFF一起使用
最好的方法是,使用JAI(Java Advanced Imaging),您可以重新缩放找到编解码器的任何媒体格式。我们将其与PNG、JPEG、GIF和TIFF一起使用
最好的,我担心这个方案不能满足您的需要,但是我已经尝试了许多JVM库,在多次尝试之后,我都没有得到预期的结果(质量损失、大尺寸、坏过滤器……),而且调整大尺寸图像的大小会消耗大量内存 因此,我建议您在上传图像之前,使用画布在浏览器中使用javascript调整图像大小,我向您保证,这是我找到的最好的解决方案 要上载的图像大小>大小4已调整大小的图像 我知道这是一项困难的任务,但我认为这是值得的,你甚至可以直接从客户端上传你的图片到mongo 最后一件事,如果你需要调整有限数量的图像,你不需要质量和大小不困扰你,那么忘记我说的,去其他的解决方案 如果您需要此解决方案的帮助,请通知我
干杯,我担心这个方案不能满足您的需要,但是我尝试了许多JVM库,在多次尝试之后,我都没有得到预期的结果(质量下降、尺寸过大、过滤器不好……),而且调整大尺寸图像的大小会消耗大量内存 因此,我建议您在上传图像之前,使用画布在浏览器中使用javascript调整图像大小,我向您保证,这是我找到的最好的解决方案 要上载的图像大小>大小4已调整大小的图像 我知道这是一项困难的任务,但我认为这是值得的,你甚至可以直接从客户端上传你的图片到mongo 最后一件事,如果你需要调整有限数量的图像,你不需要质量和大小不困扰你,那么忘记我说的,去其他的解决方案 如果您需要此解决方案的帮助,请通知我
干杯,因为您使用的是Scala,所以您可以使用Scala图像库(基本上是AWT的包装器,包含大量的帮助函数) 要从字节数组创建内存中的映像(格式无关紧要,它将自动检测): 要调整大小,请执行以下操作:
val resized = image.scaleTo(width, height)
或者您可以指定质量/速度:
val resized = image.scaleTo(width, height, ScaleMethod = Bicubic|...others)
然后把它写成JPG
val outBytes = resize.write(Format.JPEG)
要使用这个库,您需要有一个无头JRE。因为您使用的是Scala,所以您可以使用Scala图像库(基本上是AWT的包装器,包含大量的帮助函数) 要从字节数组创建内存中的映像(格式无关紧要,它将自动检测): 要调整大小,请执行以下操作:
val resized = image.scaleTo(width, height)
或者您可以指定质量/速度:
val resized = image.scaleTo(width, height, ScaleMethod = Bicubic|...others)
然后把它写成JPG
val outBytes = resize.write(Format.JPEG)
要使用此库,您需要有一个无头JRE。我们已经在MongoDB GridFs中直接存储了图像流。。。我们只需要确保图像的大小和格式。从美学角度讲,我希望让我们的后端(由一个用Scala编写的纯RESTAPI组成)完成这项工作。。。但你的建议值得一试。你知道我们在哪里可以找到一个很好的例子吗?我们已经在MongoDB GridFs中直接存储了图像流。。。我们只需要确保图像的大小和格式。从美学角度讲,我希望让我们的后端(由一个用Scala编写的纯RESTAPI组成)完成这项工作。。。但你的建议值得一试。你知道我们在哪里可以找到一个很好的例子吗?看起来很棒!我将尝试一下,并将其性能与我们按照Ben Rhouma Zied的建议实现的客户端解决方案进行比较。非常感谢你的提示。看起来很棒!我将尝试一下,并将其性能与我们按照Ben Rhouma Zied的建议实现的客户端解决方案进行比较。非常感谢你的提示。