图像调整大小但DPI没有任何妥协?

时间:2010-03-14 11:33:03

标签: php gd

我想调整DPI 300或更高版本的图像大小。 我希望它的DPI保持完整...... 我已经使用GD库函数来调整裁剪的图像,但它将DPI降低到90! 请提供解决方案,因为我的要求不涉及缩减DPI

4 个答案:

答案 0 :(得分:2)

  1. 拍摄图像,说它是1000 x 1000像素大
  2. 将图像裁剪/调整为portio,例如,100 x 100像素大
  3. 将100 x 100部分放大到1000 x 1000像素 - 使用imagecopyresampled()获得最佳效果 - manual
  4. 完成!
  5. 这显然是以较低质量的代价来实现的。

    在没有质量损失的情况下放大图像是不可能的。放大时您将无法保留原始图像质量,因为像素信息根本就不存在。有一些调整大小算法采用抗锯齿和其他技术(比如在imagecopyresampled()重新采样以帮助提高质量,但它永远不会是完美的。

    如果要在不丢失任何图像数据的情况下显示较小的较大图像,可以将其放入img标记,然后使用css width属性将其缩小。注意:这不会比调整图像大小更好。此外,您传输的数据超出了必要的数量,并且在某些浏览器中,由于使用了低质量(但速度较快)的算法,调整大小的结果可能看起来很糟糕 - 因此图像可能看起来更糟糕。

答案 1 :(得分:0)

DPI表示每英寸点数。如果调整图像大小,则英寸数保持不变(显示相同的图像),但点数减少(像素数减少)。

因此,如果降低图像的大小,则始终降低DPI。

答案 2 :(得分:0)

  

所以如果你缩小图像的大小,   你总是会降低DPI。

那不是真的 DPI只是在您打印某些内容时使用的“转换”,它没有说明屏幕上图片的质量。 如果您调整图片大小(像素大小),如果您不触摸DPI,则打印版本会以相同的方式缩小。 你可以保持印刷尺寸相同,但这意味着降低DPI

1200 * 1200px 300dpi图像打印为4“* 4”

600 * 600px图像,300dpi是2“* 2”

600 * 600px图像,150dpi是4“* 4”

如果使用imagecopyresampled(),DPI应在图像中保持不变

答案 3 :(得分:0)

如果你想裁剪图像并在裁剪区域保留源图像PPI(这将是一个新图像),你可以按照以下步骤使用Imagick:

// copy the original source to a new image, on which you'll be working

copy('example_source.jpg', 'example_cropped.jpg');

// set the resource path to work on
$resource = new Imagick('example_cropped.jpg');
// cropp the image
$resource->cropImage($cropp_width, $cropp_height, $left_offset_in_px, $top_offset_in_px);
// save the image (in this case, the same path as the one we're working on)
$resource->writeImage('example_cropped.jpg');

这是我发现的最合理的方法,因为imagecopyresampled和imagejpeg似乎将图像的PPI更改为默认的96 ppi(即使对于300 ppi的源也是如此)。