如何检查图像压缩 [英] How to check the image compression

查看:121
本文介绍了如何检查图像压缩的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好

有什么方法可以检查下载的图像(.TIFF,.PNG,.JPEG等)是否已压缩?
目前,我正在使用OpenCV,但我不在乎如何检索此信息.

如果我通过普通的Windows资源管理器->右键单击->属性->详细信息->打开一些图像,我们都可以看到压缩"字段

Thnx

Hello guys

Is there any way to check if downloaded image(.TIFF,.PNG,.JPEG and others) has compression or not ?
Currently I''m using OpenCV, but I don''t care how to retrieve this info.

If I open some image via ordinary Windows Explorer->Right button click->Properties->Details->and we all can see a "compression" field

Thnx

推荐答案

要检索压缩"字段,例如Windows资源管理器->右键单击->属性->详细信息
您必须使用GdiPlus库:
1.创建Image类对象( http://msdn. microsoft.com/en-us/library/windows/desktop/ms534462(v=vs.85).aspx [ http://msdn.microsoft.com/en-us/library/windows/desktop/ms535390(v = vs.85).aspx [
To retrieve "compression" field like Windows Explorer->Right button click->Properties->Details
You have to use GdiPlus library:
1. Create Image class object (http://msdn.microsoft.com/en-us/library/windows/desktop/ms534462(v=vs.85).aspx[^])
2. Get compression method (PropertyTagCompression) from image metadata calling Image.GetPropertyItem method (http://msdn.microsoft.com/en-us/library/windows/desktop/ms535390(v=vs.85).aspx[^])
3. Compare returned value with possible discrete values for PKEY_Image_Compression (IMAGE_COMPRESSION_*) declared in propkey.h

Code example:
#include <windows.h>
#include <gdiplus.h>
#include <propkey.h>

using namespace Gdiplus;

BOOL GetCompressionMethod(
	PWSTR			pwszImage,
	PUSHORT			pusCompresssionMethod)
{
	GdiplusStartupInput	StartupInput;
	ULONG_PTR		Token;
	Image			*pImage;
	UINT			uiSize;
	PropertyItem		*pItem;
	Status			Result;

	GdiplusStartup(&Token, &StartupInput, NULL);

	pImage = new Image(pwszImage);
	if (pImage == NULL)
	{
		GdiplusShutdown(Token);

		return FALSE;
	}

	uiSize = pImage->GetPropertyItemSize(
		PropertyTagCompression);
	if (uiSize == 0)
	{
		delete pImage;
		GdiplusShutdown(Token);

		return FALSE;
	}

	pItem = (PropertyItem *) new BYTE [uiSize];
	if (pItem == NULL)
	{
		delete pImage;
		GdiplusShutdown(Token);

		return FALSE;
	}

	Result = pImage->GetPropertyItem(
		PropertyTagCompression, uiSize, pItem);
	if (Result != Ok)
	{
		delete [] ((PBYTE) pItem);
		delete pImage;
		GdiplusShutdown(Token);

		return FALSE;
	}

	*pusCompresssionMethod = *(PUSHORT) pItem->value;

	switch (*(PUSHORT) pItem->value)
	{
	case IMAGE_COMPRESSION_UNCOMPRESSED:
		// YourCode
		break;
	case IMAGE_COMPRESSION_CCITT_T3:
		// YourCode
		break;
	case IMAGE_COMPRESSION_CCITT_T4:
		// YourCode
		break;
	case IMAGE_COMPRESSION_CCITT_T6:
		// YourCode
		break;
	case IMAGE_COMPRESSION_LZW:
		// YourCode
		break;
	case IMAGE_COMPRESSION_JPEG:
		// YourCode
		break;
	case IMAGE_COMPRESSION_PACKBITS:
		// YourCode
		break;
	}

	delete [] ((PBYTE) pItem);
	delete pImage;
	GdiplusShutdown(Token);

	return TRUE;
}


这篇关于如何检查图像压缩的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆