php代码如何生成高清图片?retina图片php代码生成方式
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
话说retina.js
可以偷换图片地址,把普通的图片地址换成高清图片地址。那么,高清图片是由谁来生成的呢?是如何通过php
来生成的呢?retina
图片生成有技巧么?如果您也有这样的疑问,请参考本文的内容。
大家好,这里是苏南大叔的程序如此灵动博客,这里介绍苏南大叔和计算机代码的故事。本文描述一个通过php
代码生成retina
高清图片的方式。本文测试环境:centos@7.7.1908
,php@7.4.28
,gd@2.1.0
。
需求分析
首先,这个需求是由于硬件设备的变化而引起的图片不清晰问题所引起的。那么,主要目标就是解决图片不清晰的问题。目前前端的方案已经有个retina.js
作为备选。然后就是需要后端配合生成对应的高清图片。
那么,对于不清晰的图片变清晰,这个可能比较麻烦。需要ai
智能补充颜色点,生成矢量图之类的操作。这个并不是目前本文要讨论的问题范畴。因为本文的原图片本来就是清晰的,只不过因为像素换算问题,在高清屏幕上显示的不清晰了。
window.devicePixelRatio
基本定义:高清屏幕,就是指devicePixelRatio
大于1的设备。这个devicePixelRatio
值,也是本文的关键,这个值是在前端获得的。高清图不一定是2x
,也可能是更多。而这个定义,其实就是宽度和高度的比例。
解决方案
本文中这个高清图片需求到最终,解决方案就是个伪方案,其实就是对图片成比例拉伸。
$ratio = 2;
$img_from = dirname(__FILE__).DIRECTORY_SEPARATOR."test.png";
$img_to = dirname(__FILE__).DIRECTORY_SEPARATOR."test@".$ratio."x.png";
$image_info = getimagesize($img_from);
$image = @imagecreatefrompng($img_from);
$width = imagesx($image);
$height = imagesy($image);
$new_width = $width * $ratio;
$new_height = $height * $ratio;
$im = imagecreatetruecolor($new_width, $new_height);
imagealphablending($im, false);
imagesavealpha($im, true);
$color = imagecolortransparent($im, imagecolorallocatealpha($im, 0, 0, 0, 127));
imagefill($im, 0, 0, $color);
imagecopyresampled($im, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// header('Content-type:image/png');
// imagepng($im, null);
imageinterlace($im,1);
imagepng($im, $img_to);
imagedestroy($im);
本文以png
图片为例,所以使用了imagecreatefrompng()
和imagepng()
。另外,关于生成的新图片是否开启交错功能,可以参考文章:
相关文章
- https://newsn.net/say/php-change-image-mode.html
- https://newsn.net/say/php-retina.html
- https://newsn.net/say/retina-js.html
综述
本文生成高清图片的需求,由于图片本身就是清晰图片。所以,最终的解决方案变成了按比例拉伸图片。然后配合retina.js
或者类似逻辑,就可以完成最终的需求了。更多php
相关经验文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。