如何在不改变图片分辨率的情况下增加图片的大小
Posted tolerate
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不改变图片分辨率的情况下增加图片的大小相关的知识,希望对你有一定的参考价值。
应某人要求将一张原图分辨率820x1148,大小83.5kb,格式为jpg的图片变成分辨率260x390,大小200kb以上1mb以下,格式为jpg的图片。
网上各种无损增大图片的方法,都无一例外的改变了图像的分辨率,最终只找到两种能够不改变图像分辨率的情况下增加图片大小的方法。
下面分享一下这两种方法:
一、图像隐写:
图片隐写指的是在一张图片中嵌入秘密信息的过程。通过改变像素值、色彩分量或者将数据嵌入到不可见区域(如DCT系数、LSB位等),可以在图片中隐藏任意类型的信息。
在网上搜索“图像隐写工具”,随便打开一个在线工具,然后随便写入数据。
这里使用的是脚本之家的在线工具:在线图片添加/解密隐藏信息(隐写术)工具 - 站长辅助工具 - 脚本之家在线工具 (jb51.net)
可以看到结果,图像到达150kb后无论如何反复写入都无法再增加大小:
结论是图像隐写所能写入的数据量大小通常取决于载体图片的像素数量以及嵌入算法的复杂度等因素。所以像素量不够意味着不能再写入数据了。
于是尝试第二种方法。
二、在PS中修改图片的模式为:“CMYK颜色”模式
然后另存为.jpg格式的图片。
可以看到虽然预览的大小超过了1mb,但是保存后还是进行了压缩,可以放心使用:
至此实现了在不改变图片分辨率的情况下增加图片的大小。
如何在不更改 C#.Net 中的分辨率的情况下裁剪图像?
【中文标题】如何在不更改 C#.Net 中的分辨率的情况下裁剪图像?【英文标题】:How can I crop image without changing its resolution in C#.Net? 【发布时间】:2009-05-13 10:14:58 【问题描述】:我做了一个小程序,把大图分割,取一部分。 当我导入由“Microsoft Paint”制作的图像时,这个图像是“96 dpi”,所以我的程序运行良好。
但是我有 Photoshop 制作的图片,当我裁剪这些图片时,其分辨率为 71.6 dpi,新裁剪的图片采用 96 dpi 分辨率,因此它们之间的大小是不同的。
我想裁剪图片并保持其分辨率不变。
.
非常感谢
【问题讨论】:
这是一道编程题吗?为什么在标题中提到 C#? 你是如何在 Photoshop 中裁剪的? 【参考方案1】:Bitmap.clone
可让您创建图像的裁剪副本,然后您可以将其保存。它不应该改变分辨率或任何东西(如果您在图像较小时放大更多的程序中打开图像,图像会看起来更大)。它不能用于扩展画布(您会出现内存不足错误)。因此,只需从文件中获取 Image
,转换为 Bitmap
,(system.drawing
命名空间)并将其克隆为更小,然后保存。
例子:
using System.Drawing;
//...
Bitmap x = (Bitmap) Image.FromFile(@"c:\tmp\food.png");
Image x2 = x.Clone(new Rectangle(25, 25, 50, 50), x.PixelFormat);
x2.Save(@"c:\tmp\food2.png");
【讨论】:
就是这样,非常感谢。 回头看,Bitmap
有一个构造函数,public Bitmap(string filename);
。因此,强制转换 Image.FromFile
并不是绝对必要的。此外,using
语句可能会使这可以更好地处理资源清理。【参考方案2】:
DPI(每英寸点数)只是像素大小和介质大小之间的关系。如果您有一个 1024 x 768 像素的图像,则它是 1024 x 768。位图/二进制文件没有固有的 DPI。
如果您想在以 300 dpi 打印的打印机上打印该图像,那么您可以计算纸张上的尺寸,例如。
【讨论】:
告诉我什么:什么是大的(以像素为单位),什么是小的(以像素为单位)。如果您不知道像素,请告诉我您需要的英寸和 dpi。根据英寸和 dpi,您可以计算像素。 将这些信息也放入问题中可能会有所帮助。【参考方案3】:Bitmap 类的 SetResolution() 方法允许您指定图像的分辨率。
见http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.setresolution.aspx
【讨论】:
以上是关于如何在不改变图片分辨率的情况下增加图片的大小的主要内容,如果未能解决你的问题,请参考以下文章