我正在寻找int[][]
从a 获取像素数据(在表单中)的最快方法BufferedImage
.我的目标是能够(x, y)
使用图像来处理图像中的像素int[x][y]
.我发现的所有方法都没有这样做(大多数都返回int[]
s).
除了使用ImageIO.read获取图像高度和宽度之外还有其他方法吗?
因为我遇到了锁定线程的问题.
at com.sun.medialib.codec.jpeg.Decoder.njpeg_decode(Native Method)
at com.sun.medialib.codec.jpeg.Decoder.decode(Decoder.java:87)
at com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader.decode(CLibJPEGImageReader.java:73)
- locked <0xd96fb668> (a com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader)
at com.sun.media.imageioimpl.plugins.clib.CLibImageReader.getImage(CLibImageReader.java:320)
- locked <0xd96fb668> (a com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader)
at com.sun.media.imageioimpl.plugins.clib.CLibImageReader.read(CLibImageReader.java:384)
- locked <0xd96fb668> (a com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader)
at javax.imageio.ImageIO.read(ImageIO.java:1400)
at javax.imageio.ImageIO.read(ImageIO.java:1322)
Run Code Online (Sandbox Code Playgroud)
此错误仅发生在Sun应用服务器上,因此我怀疑它是Sun错误.
有没有办法在不读取整个文件的情况下获取图像的尺寸?
URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;
Run Code Online (Sandbox Code Playgroud) 我在iOS 4.1中使用新的ImageIO框架.我使用以下代码成功检索exif元数据:
CFDictionaryRef metadataDict = CMGetAttachment(sampleBuffer, kCGImagePropertyExifDictionary , NULL);
Run Code Online (Sandbox Code Playgroud)
阅读它,它似乎是有效的.保存图像有效,但图像中从不存在任何exif数据.
CGImageDestinationRef myImageDest = CGImageDestinationCreateWithURL((CFURLRef) docurl, kUTTypeJPEG, 1, NULL);
// Add the image to the destination using previously saved options.
CGImageDestinationAddImage(myImageDest, iref, NULL);
//add back exif
NSDictionary *props = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat:.1], kCGImageDestinationLossyCompressionQuality,
metadataDict, kCGImagePropertyExifDictionary, //the exif metadata
nil];
//kCGImagePropertyExifAuxDictionary
CGImageDestinationSetProperties(myImageDest, (CFDictionaryRef) props);
// Finalize the image destination.
bool status = CGImageDestinationFinalize(myImageDest);
Run Code Online (Sandbox Code Playgroud) 我有一个BufferedImage我正在尝试写一个jpeg文件,但是我的Java程序抛出异常.我能够成功地将相同的缓冲区保存到gif和png.我曾尝试在Google上寻找解决方案,但无济于事.
码:
File outputfile = new File("tiles/" + row + ":" + col + ".jpg");
try {
ImageIO.write(mapBufferTiles[row][col], "jpg", outputfile);
} catch (IOException e) {
outputfile.delete();
throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud)
例外:
Exception in thread "main" java.lang.RuntimeException: javax.imageio.IIOException: Invalid argument to native writeImage
at MapServer.initMapBuffer(MapServer.java:90)
at MapServer.<init>(MapServer.java:24)
at MapServer.main(MapServer.java:118)
Caused by: javax.imageio.IIOException: Invalid argument to native writeImage
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeImage(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeOnThread(JPEGImageWriter.java:1055)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.write(JPEGImageWriter.java:357)
at javax.imageio.ImageWriter.write(ImageWriter.java:615)
at javax.imageio.ImageIO.doWrite(ImageIO.java:1602)
at javax.imageio.ImageIO.write(ImageIO.java:1526)
at MapServer.initMapBuffer(MapServer.java:87)
... 2 more
Run Code Online (Sandbox Code Playgroud) 我有一个运行Jersey REST资源的Web服务器,我想知道如何获取浏览器img标签的image/png参考; 提交表单或获得Ajax响应后.用于添加图形的图像处理代码正常工作,只需要以某种方式返回它.
码:
@POST
@Path("{fullsize}")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("image/png")
// Would need to replace void
public void getFullImage(@FormDataParam("photo") InputStream imageIS,
@FormDataParam("submit") String extra) {
BufferedImage image = ImageIO.read(imageIS);
// .... image processing
//.... image processing
return ImageIO. .. ?
}
Run Code Online (Sandbox Code Playgroud)
干杯
我在使用ImageIO.read(文件文件)读取这个JPEG文件时遇到问题 - 它会抛出一条带有"Unsupported Image Type"消息的异常.
我尝试过其他JPEG图像,它们似乎工作正常.
我能够发现的唯一区别是这个文件似乎包含一个缩略图 - 已知会导致ImageIO.read()出现问题吗?
编辑:
添加了生成的图像:
如何从BufferedImage对象获取InputStream?我试过这个,但ImageIO.createImageInputStream()总是返回NULL
BufferedImage bigImage = GraphicsUtilities.createThumbnail(ImageIO.read(file), 300);
ImageInputStream bigInputStream = ImageIO.createImageInputStream(bigImage);
Run Code Online (Sandbox Code Playgroud)
因为我可以成功地将bigImage绘制到JPanel,所以正确生成了图像缩略图.
谢谢.
我正在使用javax.imageio.ImageIO
保存BufferedImage
为jpeg文件.特别是,我创建了以下Java函数:
public static void getScreenShot(BufferedImage capture, Path folder, String filename) {
try {
ImageIO.write(capture, "jpeg", new File(folder.toString()+"/"+filename+".jpg"));
} catch (AWTException | IOException ex) {
Logger.getLogger(ScreenShotMaker.class.getName()).log(Level.SEVERE, null, ex);
}
}
Run Code Online (Sandbox Code Playgroud)
同样任何图像处理软件,我希望改变jpeg文件的压缩级别.但是,我正在寻找似乎缺少的这个选项ImageIO
.
我可以设置压缩级别以及如何设置?
我发现在使用Java(实际上是绘制.NET)时,我使用的不同是RGB,而不是使用ImageMagick,Gimp,Python和Octave.最后4个都同意彼此,所以我假设是正确的.
对于这些示例,我正在使用此测试图像: http://farm3.static.flickr.com/2811/9177301733_9836174725_o.jpg
测试像素 x=4144 y=2768
R G B
Java = (125, 107, 69)
Paint.NET = (125, 107, 69)
ImageMagick = (128, 106, 67)
Python = (128, 106, 67)
Octave = (128, 106, 67)
Gimp = (128, 106, 67)
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?
这是使用imagemagick的快速测试:
convert image.jpg -crop 1x1+4144+2768 -depth 8 txt:
Run Code Online (Sandbox Code Playgroud)
输出:
# ImageMagick pixel enumeration: 1,1,65535,srgb
0,0: (32896,27242,17219) #806A43 srgb(128,106,67)
Run Code Online (Sandbox Code Playgroud)
这里有一些java和python代码也演示了这个问题:
import org.apache.commons.io.FileUtils;
import org.junit.Test;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
public class ImageIOTest …
Run Code Online (Sandbox Code Playgroud)