jpeglib如何判断图片不是jpeg格式返回false的函数,有没有?
时间: 2024-02-23 11:02:05 浏览: 18
jpeglib中提供了一个函数`jpeg_start_decompress()`,用于启动jpeg解压缩过程。如果这个函数返回false,则说明该图片不是一个合法的jpeg格式。因此,可以通过以下代码来判断图片是否为jpeg格式:
```c++
#include <stdio.h>
#include <stdlib.h>
#include <jpeglib.h>
bool isJPEG(const char* filename) {
FILE* fp = fopen(filename, "rb");
if (!fp) {
return false;
}
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
jpeg_stdio_src(&cinfo, fp);
bool ret = (jpeg_read_header(&cinfo, TRUE) == JPEG_HEADER_OK);
fclose(fp);
jpeg_destroy_decompress(&cinfo);
return ret;
}
```
这个函数接受一个文件名作为参数,如果文件存在且为一个合法的jpeg格式,则返回true;否则返回false。
相关问题
compressorjs jpeg 格式图片没有被压缩是怎么回事?
如果使用compressorjs对JPEG格式的图片进行压缩,但结果没有达到预期的压缩效果,可能是由于以下原因之一:
1. 原始图片本身已经是高度压缩的JPEG格式。如果原始图片已经经过了高度压缩,再对其进行压缩可能不会有明显的效果。这是因为JPEG是一种有损压缩格式,多次压缩可能导致图像质量的进一步损失。
2. 压缩参数设置不当。在使用compressorjs时,可以通过调整quality参数来控制压缩的质量。quality参数的值应该在0到1之间,数值越低表示质量损失越大,文件大小也越小。你可以尝试将quality值调低一些,例如0.5或更低,以获得更明显的压缩效果。
3. 图片尺寸已经小于设定的最大宽度和最大高度。如果原始图片的尺寸已经小于你在compressorjs中设置的最大宽度和最大高度,那么压缩过程中将不会对图像进行任何改变。你可以检查一下原始图片的尺寸是否小于设定的最大尺寸。
请注意,以上只是一些常见的可能原因,并不一定适用于所有情况。你可以进一步检查你的代码和图片,以确认是否存在其他问题导致压缩不生效。另外,你也可以尝试使用其他图片压缩库或工具来进行比较和验证。
如何用java判断图片流是png格式还是jpeg格式
可以使用ImageIO类的静态方法`read`来读取图片流,并通过`getFormatName`方法获取图片格式名称,示例代码如下:
```java
try {
InputStream inputStream = new ByteArrayInputStream(imageBytes);
ImageInputStream imageInputStream = ImageIO.createImageInputStream(inputStream);
Iterator<ImageReader> imageReaders = ImageIO.getImageReaders(imageInputStream);
if (imageReaders.hasNext()) {
ImageReader imageReader = imageReaders.next();
imageReader.setInput(imageInputStream);
String formatName = imageReader.getFormatName();
if ("JPEG".equalsIgnoreCase(formatName)) {
System.out.println("图片格式为JPEG");
} else if ("PNG".equalsIgnoreCase(formatName)) {
System.out.println("图片格式为PNG");
} else {
System.out.println("图片格式不支持");
}
}
} catch (IOException e) {
e.printStackTrace();
}
```
其中`imageBytes`为图片流的字节数组。