我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

话说retina.js可以偷换图片地址,把普通的图片地址换成高清图片地址。那么,高清图片是由谁来生成的呢?是如何通过php来生成的呢?retina图片生成有技巧么?如果您也有这样的疑问,请参考本文的内容。

苏南大叔:php代码如何生成高清图片?retina图片php代码生成方式 - php-retina-hero
php代码如何生成高清图片?retina图片php代码生成方式(图2-1)

大家好,这里是苏南大叔的平行空间笔记本博客,这里介绍苏南大叔和计算机代码的故事。本文描述一个通过php代码生成retina高清图片的方式。本文测试环境:centos@7.7.1908php@7.4.28gd@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);

苏南大叔:php代码如何生成高清图片?retina图片php代码生成方式 - php-retina-code
php代码如何生成高清图片?retina图片php代码生成方式(图2-2)

本文以png图片为例,所以使用了imagecreatefrompng()imagepng()。另外,关于生成的新图片是否开启交错功能,可以参考文章:

相关文章

综述

本文生成高清图片的需求,由于图片本身就是清晰图片。所以,最终的解决方案变成了按比例拉伸图片。然后配合retina.js或者类似逻辑,就可以完成最终的需求了。更多php相关经验文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    gd