我习惯com.sun.image.codec.jpeg.JPEGImageEncoder在我的webapp中处理JPEG图像,如图表和其他图像.现在,我正在更新我的机器以使用JDK7,但是这个版本不赞成这个类.以下是我需要更改的代码:
public void processChart(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
out = response.getOutputStream();
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires",0);
try {
int w = Integer.parseInt(request.getParameter("WIDTH"));
int h = Integer.parseInt(request.getParameter("HEIGHT"));
java.awt.image.BufferedImage ChartImage = new java.awt.image.BufferedImage(w,h,java.awt.image.BufferedImage.TYPE_INT_RGB);
java.awt.Graphics2D ChartGraphics = ChartImage.createGraphics();
Chart c = getChart(request);
c.setSize(w,h);
c.paint(ChartGraphics);
// CODE BELOW TO CHANGE...
com.sun.image.codec.jpeg.JPEGImageEncoder encoder =
com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(out);
encoder.encode(ChartImage);
} catch (Exception e) {
e.printStackTrace();
}
}
private Chart getChart(HttpServletRequest request) {
chartLoader loader = new chartLoader(null);
loader.paintDirect = true;
java.util.Enumeration ps …Run Code Online (Sandbox Code Playgroud) 我一直在javax.imageio.ImageIO中使用ImageIO.read()和ImageIO.write()方法来读取和写入图像,我发现一些图像的颜色变得奇怪.
即使我改变我的代码除了只读取图像并编写它们(使用jpeg,png,gif)之外什么都不做,所有这些新图像都有同样的问题.
我是否需要在ImageIO.read/write方法之前/之后添加任何其他代码?
这是我使用的代码:
File f = new File("obw.jpg");
BufferedImage bi = ImageIO.read(f);
FileOutputStream fos2 = new FileOutputStream("obw2.jpg");
ImageIO.write(bi, "JPG", fos2);
FileOutputStream fos3 = new FileOutputStream("obw3.gif");
ImageIO.write(bi, "GIF", fos3);
FileOutputStream fos4 = new FileOutputStream("obw4.png");
ImageIO.write(bi, "PNG", fos4);
Run Code Online (Sandbox Code Playgroud)
我的环境:
java version "1.6.0_35"
MacOSX 10.8.2
Run Code Online (Sandbox Code Playgroud)
原始图片:

读写后的图像之一:

好的,我有一个我想读的图像.问题是Image.read(file)返回NULL.
File file = new File("C:\\images\\image1.jpg");
if(file.exists()){
System.out.println("Image file exists.");
BufferedImage originalImage = ImageIO.read(file);
}
Run Code Online (Sandbox Code Playgroud)
因此图像存在但ImageIO.read(file)返回NULL.没有抛出的错误没有!这是怎么回事?
这是我到目前为止所尝试的:
有人可以帮忙吗?我是新手,不知道如何解决这个问题.
好吧,我只是想通了ImageIO.getImageReaders(stream)返回一个空的Iterator.这意味着它找不到合适的读卡器?我怎么读这个图像?
我需要将图像从CMYK转换为RGB - 不一定再回来了,但是嘿,如果可以的话......
随着ColdFusion 8的发布,我们获得了CFImage标签,但它不支持这种转换; Image.cfc或Alagad的Image Component也没有.
但是,应该可以用Java; 我们可以通过CF来利用它.例如,以下是创建Java线程以休眠进程的方法:
<cfset jthread = createObject("java", "java.lang.Thread")/>
<cfset jthread.sleep(5000)/>
Run Code Online (Sandbox Code Playgroud)
我猜可以使用类似的方法来利用java来进行这种图像转换,但不是Java开发人员,我不知道从哪里开始.任何人都可以在这里伸出援手吗?
看起来完全相同的2个jpg图像(上面的图像失败,no.jpg,重新保存为yes.png)但根据IsImageFile函数,一个不是图像.
运行此代码
#IsImageFile("http://fdiapp.com/ini/cms/file_uploads/yes.jpg")#
**
#IsImageFile("http://fdiapp.com/ini/cms/file_uploads/no.jpg")#
Run Code Online (Sandbox Code Playgroud) 我有这个图像:

我想在一个中提取这个图像的RGB值int[].这是我到目前为止为PNG图像所做的事情:
File f = new File("t.jpg");
BufferedImage img = ImageIO.read(f);
int[] ib = img.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth());
Color c = new Color(ib[0]);
System.out.println(c.getRed() + " " + c.getGreen() + " " + c.getBlue());
Run Code Online (Sandbox Code Playgroud)
但是在这里我得到了这个输出:255 128 128由于我清楚地看到(并且已经在几个图像编辑器中验证过)(0,0)处的像素具有这些值,所以这是预期的255 255 255.
我注意到返回的类型img.getType()等于TYPE_3BYTE_BGR所以我猜这是在场景后面发生的解码问题,但我无法弄清楚如何解决它(或者更清楚地了解正在发生的事情).
有没有人会对如何正确解码这种类型提出建议?
我有一个奇怪的 JPEG 图像文件 ImageIO.read() 无法加载:
ImageIO.read(new URL("http://nocturne.wmw.cc/a.jpg"));
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Exception in thread "main" javax.imageio.IIOException: Unsupported Image Type
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:995)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:966)
at javax.imageio.ImageIO.read(ImageIO.java:1448)
at javax.imageio.ImageIO.read(ImageIO.java:1400)
at Main.main(Main.java:23)
Run Code Online (Sandbox Code Playgroud)
我正在接受用户输入的图像。我只想允许 JPEG 图像。图像作为 InputStream 到达(myInputStream下面称为)。在下面的代码中,返回的 IteratorImageIO.getImageReaders()始终为空。
ImageInputStream imageInputStream = ImageIO.createImageInputStream(
myInputStream);
Iterator<ImageReader> iter = ImageIO.getImageReaders(imageInputStream);
if (!iter.hasNext()) {
// this always happens
}
ImageReader reader = (ImageReader) iter.next();
if (!reader.getFormatName().equals("jpeg")) {
// haven't got this far yet
}
Run Code Online (Sandbox Code Playgroud)
我也试过myInputStream直接传递到ImageIO.getImageReaders()相同的结果。
我正在开发一个应用程序,它有5个选项卡,对图像进行以下5个操作:无操作,颜色转换,仿射变换,卷积和查找.
这是代码:
import java.awt.color.ColorSpace;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.awt.image.LookupOp;
import java.awt.image.LookupTable;
import java.awt.image.ShortLookupTable;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class ImageProcessing extends JFrame{
BufferedImage source;
public static void main(String args[])
{
try {
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Exception e1){e1.printStackTrace();}
SwingUtilities.invokeLater(new Runnable(){public void run(){new ImageProcessing();}});
}
public ImageProcessing() {
// TODO Auto-generated constructor stub
super("Image Processing");
setSize(600,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try
{ …Run Code Online (Sandbox Code Playgroud) java ×8
image ×5
coldfusion ×2
swing ×2
applet ×1
coldfusion-9 ×1
graphics2d ×1
java-7 ×1
jpeg ×1
metadata ×1
rgb ×1