65.9K
CodeProject 正在变化。 阅读更多。
Home

JPG 标签移除器以及你可能需要它的原因

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2012 年 8 月 14 日

CPOL

3分钟阅读

viewsIcon

10711

downloadIcon

299

用 C# 编写的用于移除 JPG 图像标签的实用程序。

Sample Image

引言

首先,如果这是一个众所周知的问题,并且有其他经过验证的解决方案,我提前道歉。我没有在 CodeProject 文章和技巧中找到一个。一些网站(我不提名字)限制会员上传到个人资料的图像文件大小,比如 15 KB - 这个限制小得惊人。但也不好过多批评。假设你有超过九百万的会员,并且他们都在个人资料中上传了一张 15 KB 的照片。那么网站就需要在线支持超过 130 GB 的存储空间,仅仅是为了会员的照片。

本文展示了一个可以帮助满足此限制的实用程序。

背景

你能分辨出这两张照片的区别吗?

Member at the beach   Member at the beach, Photoshopped

有一些细微的差异,但除非你将它们都放大,否则很难看到它们。令人惊讶的是,左边的那张只有 5 KB,仅为限制的三分之一,而右边的那张是 21 KB,这太大了。

长话短说,我值得信赖和喜爱的 Adobe Photoshop 7.0 是造成这种差异的原因。我所做的只是打开左边的图像,然后另存为右边的图像,并告诉 Photoshop 不要包含预览或 ICC 配置文件。如果你使用 Photoshop 7.0 或其他版本,你可能已经见过这个问题。

我不知道 Photoshop 除了 EXIF 标签之外还添加了什么,但这个实用程序可以让你删除它们,从而创建一个更小的 JPG 文件。

顺便说一下,这个实用程序并不是用来剥离非常大的图像的。文件大小限制约为 8 MB。另外,由于图像是在内存中解码的,所以对于大型图像,这个实用程序会有点慢。

使用代码

此实用程序中的工具栏只有一个“文件”菜单,其中包含“打开”、“保存”、“另存为”和“退出”。 通过选择“打开”来加载源图像。

你可以拉伸此实用程序窗口的右下角,以获得更大更好的加载图像视图。

此实用程序提供加载图像的尺寸和大小,以及可以在当前**质量级别**保存的图像的大小。 质量级别以 Photoshop JPG 质量值给出,[1..12]。 Windows.Media.Imaging API 需要范围为 [1..100],所以我使用此代码从我熟悉的范围映射到 JpegBitmapEncoder.Frames.Add 所需的范围。

private int GetQualityLevel() // Maps range[1..12] to [1..100]
{
    float hundredBased = (((float)trackBar1.Value - 1.0F) * 99.0F / 11.0F);
    int ret = (int)(hundredBased + 1.0F);
    return ret;
}

如果你将滑块拖动到不同的质量级别,你将看到质量对可以保存的图像以及保存文件的大小的影响。 尝试滑动到质量级别 1。你应该会看到严重恶化的图像。

关注点

我经常以质量 12 保存 Photoshop 图像,因为我想要最好的图像。创建这个实用程序让我意识到,有时我增加了图像文件的大小,但没有任何好处。在此实用程序中加载图像会将质量级别默认设置为 12。如果你加载图像并看到**保存的图像大小**大于原始**图像大小**,则可以安全地以较低的质量级别保存剥离的图像。

另一方面,如果质量 12 保存的图像大小小于原始大小,则在将源剥离到你保存的文件时可能会略微损失质量。 请记住,JPG 是一种有损压缩。 重复重新压缩就像重复乘以 .999。

是的,我使用这个实用程序制作了我的小个人资料照片,全部 14 KB。

参考

历史

  • 于 2012 年 8 月 14 日提交给 CodeProject
© . All rights reserved.