wav*_*avy 9 php gd image high-resolution
当用户上传图片时,我正在处理图片,但我的问题是高rez pics.如何检测用户上传的时间?我正在使用GD库的PHP.使用imagejpeg()方法将质量设置为90不会对其执行任何操作,但会缩放尺寸,然后将ppi设置为72.我希望能够保留尺寸并同时将ppi降至72.任何建议将不胜感激.
cor*_*ard 17
就你需要关注的而言,没有PPI这样的东西.此外,DPI不存在于数字中.只有像素和尺寸(它们只是两个方向上像素的测量值).
你真正想做的是对图像进行下采样,减少图像的整体尺寸.您可能希望按比例执行此操作,也就是说您希望保持相同的宽高比,以便在重新采样后图像不会显示为拉伸.另外值得注意的是,调整大小和重新采样的不同之处在于,调整大小并不会过多地关注内容,从而导致视觉上很差的调整大小的图像.您可能想要重新取样.
PHP文档有一些处理上传文件的好例子,以及如何使用GDImage库调整图像大小.我建议你看看.您可能想了解的其他相关方法:
TMS*_*TMS 12
首先,让我们澄清术语.既PPI(像素每英寸)和DPI(点每英寸)是指定像素的物理单位(在本例英寸)的转化率.在数字世界中 - 计算机,图像,... 在使用PPI的地方错误地使用DPI.DPI实际上只存在于印刷世界中.但对我们来说,DPI = PPI.>>更多信息
分辨率信息(有时称为DPI,但它是PPI)存储在标题中(图像元信息).JPG和PNG支持这一点; 但GIF不支持DPI - 它不存在于 GIF标题中.
那么,你可能会问如何在图像标题中设置PPI(DPI)?在PHP中,您可以使用Imagick库(当然不适用于GIF)来实现:
$image = new Imagick('img.jpg'); // default 72 dpi image
$image->setImageResolution(500, 500);
$image->writeImage("img-500dpi.jpg"); // this image will have 500 dpi
Run Code Online (Sandbox Code Playgroud)
如果您下载这些图像并尝试在IrfanView中打印它们,它实际上将使用dpi信息将像素转换为目标物理单位.两个图像将以不同的尺寸打印.
坏消息是, 在网页上显示图像时,这不会改变任何内容.显示器的锚单元始终是CSS中的像素.因此img.jpg
,img-500dpi.jpg
浏览器中的大小将完全相同.即使您直接打开图像.即使你使用像cm
以下物理单位:
img { width: 8cm; height: 6cm; }
Run Code Online (Sandbox Code Playgroud)
两个图像将以相同的大小显示; 无论使用固定比率的图像分辨率如何,物理单位都被转换为像素.令人惊讶的是,即使您尝试在Firefox中打印原始图像(而不是页面),它们也将以相同的尺寸打印.无法评论其他浏览器.奇怪的是 - 这在Irfanview中如预期的那样有效.
现在有了Iphones等视网膜(即高分辨率)图像变得时髦.这里有很多关于DPI(实际上是PPI)的内容,但这只与目标设备和CSS媒体查询有关.没有任何东西可以真正识别你的形象的PPI; 您必须以像素为单位指定高分辨率视网膜图像的实际尺寸.这是66x66图标的示例(从此处):
@media (-webkit-min-device-pixel-ratio: 2),
(min-resolution: 192dpi) {
.box {
background:url('images/icon66x66.png') no-repeat top left;
background-size: 33px 33px;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以通过在CSS中为它们设置较低的尺寸来实际"缩小"高分辨率图像.但我只建议对视网膜图像和正确的媒体查询进行此操作.
所以实际上,如果你想让上传的图像在网上显得更小,最好的方法就是重新取样.重新采样意味着不仅仅更改标题,而是更改图像的实际像素矩阵.这是我在PHP中使用的代码,它使用GD库:
$t = imagecreatefromjpeg($old_img_path);
$s = imagecreatetruecolor($new_width, $new_height);
$x = imagesx($t);
$y = imagesy($t);
imagecopyresampled($s, $t, 0, 0, 0, 0, $new_width, $new_height, $x, $y);
imagejpeg($s, $new_img_path);
chmod($new_img_path, 0644);
Run Code Online (Sandbox Code Playgroud)
请注意,这需要相当多的内存,这可能会受到您的托管服务提供商的限制.
归档时间: |
|
查看次数: |
25056 次 |
最近记录: |