添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

这几天解决了一个困扰已久的问题,我的博客系统在文章上传图片生成缩略图时,在本地测试环境没有任何问题,但在服务器环境中总是生成缩略图失败,报错:"Implicit conversion from float"。排查了 PHP 和环境扩展组件库、目录权限、图片格式大小等都没有问题。在百思不得其解时,我注意到了一个平时不太注意的细节,我在本地测试环境用的是 PHP 8.0,服务器上用的是 PHP 8.1,经过反复测试问题果然出在这里。

由于生成缩略图时会对图片进行宽高尺寸和比例计算,然后对图片进行等比例缩放和裁切,生成相应尺寸的缩略图。在 PHP 8.1 中,报错 "Implicit conversion from float" 通常是因为在代码中将一个浮点数转换为了整数,而这个浮点数可能无法精确地表示为整数,从而导致了这个错误,而在 PHP 8.0 中没有这么严格的判定,则不会报错。

要解决这个问题,可以采取以下几种方法:

使用 (int) 强制转换:如果你确定要将浮点数转换为整数,可以使用 (int) 来强制转换。这将确保将浮点数舍入为最接近的整数。例如:

$floatValue = 10.5;  
$intValue = (int)$floatValue; // 将浮点数转换为整数

使用 floatval() 函数:floatval() 函数可以将一个字符串或变量转换为浮点数。如果你不确定一个变量是否为浮点数,可以使用该函数来确保将其转换为浮点数。例如:

$value = "10.5";  
$floatValue = floatval($value); // 将字符串转换为浮点数

避免隐式转换:在编写代码时,尽量明确地进行类型转换,而不是依赖于隐式转换。使用 (int) 或 (float) 来明确地指定你要进行的类型转换。例如:

$floatValue = 10.5;  
$intValue = (int)$floatValue; // 明确转换  
$floatValue2 = (float)$intValue; // 明确转换

这是我用的缩略图生成类:

// 应用公共文件 * 居中裁剪图片 * @param string $source [原图路径] * @param int $width [设置宽度] * @param int $height [设置高度] * @param string $target [目标路径] * @return bool [裁剪结果] function image_center_crop($source, $width, $height, $target) if (!file_exists($source)) return false; /* 根据类型载入图像 */ switch (exif_imagetype($source)) { case IMAGETYPE_JPEG: $image = imagecreatefromjpeg($source); break; case IMAGETYPE_PNG: $image = imagecreatefrompng($source); break; case IMAGETYPE_GIF: $image = imagecreatefromgif($source); break; if (!isset($image)) return false; /* 获取图像尺寸信息 */ $target_w = $width; $target_h = $height; $source_w = imagesx($image); $source_h = imagesy($image); /* 计算裁剪宽度和高度 */ $judge = (($source_w / $source_h) > ($target_w / $target_h)); $resize_w = $judge ? ($source_w * $target_h) / $source_h : $target_w; $resize_h = !$judge ? ($source_h * $target_w) / $source_w : $target_h; $start_x = $judge ? ($resize_w - $target_w) / 2 : 0; $start_y = !$judge ? ($resize_h - $target_h) / 2 : 0; /* 绘制居中缩放图像 */ $resize_img = imagecreatetruecolor($resize_w, $resize_h); imagecopyresampled($resize_img, $image, 0, 0, 0, 0, $resize_w, $resize_h, $source_w, $source_h); $target_img = imagecreatetruecolor($target_w, $target_h); imagecopy($target_img, $resize_img, 0, 0, $start_x, $start_y, $resize_w, $resize_h); /* 将图片保存至文件 */ if (!file_exists(dirname($target))) mkdir(dirname($target), 0777, true); switch (exif_imagetype($source)) { case IMAGETYPE_JPEG: imagejpeg($target_img, $target); break; case IMAGETYPE_PNG: imagepng($target_img, $target); break; case IMAGETYPE_GIF: imagegif($target_img, $target); break; return boolval(file_exists($target));

知道问题的所在了,通过使用 (int) 进行显式转换,确保传递给图像处理函数的参数是整数类型,从而避免隐式类型转换错误。修改后的第 41 - 44 行代码:

$resize_img = imagecreatetruecolor((int)$resize_w, (int)$resize_h);  
imagecopyresampled($resize_img, $image, 0, 0, 0, 0, (int)$resize_w, (int)$resize_h, (int)$source_w, (int)$source_h);  
$target_img = imagecreatetruecolor((int)$target_w, (int)$target_h);  
imagecopy($target_img, $resize_img, 0, 0, (int)$start_x, (int)$start_y, (int)$resize_w, (int)$resize_h);

本站原创内容,如需转载请注明来源: https://www.liutonghui.com/231.html

8月12日,国足公布了最新一期备战12强赛的球员名单,在李铁观察的60人中选择了其中31个进入本次国家队名单,其中包括了郭田雨、朱辰杰、高准翼等近期表现好的年轻小将。   最新一期国足名单:   门将:刘殿座、颜骏凌、王大雷、董春雨   后卫:蒋光太、张琳芃、高准翼、于大宝、李磊、王刚、王燊超、李昂、朱辰杰   中场:张稀哲、池忠国、金敬道、徐新、吴曦、尹鸿博、王秋明、蒿俊闵   前锋:武磊、艾克森、阿兰、韦世豪、洛国富、张玉宁、...... 2021-08-14 12月17日,消失在歌迷视线中多年的老牌创作型歌手王杰突然发布了一首新歌《一场游戏一场梦(结束篇)》,今年是2022年,正好是王杰出道35年整。1987年12月19日,王杰在台湾发行首张专辑《一场游戏一场梦》正式出道,这张专辑一经发行就轰动了整个华语乐坛,在中国台湾、中国香港、中国大陆、东南亚等地都创下了惊人的销量,专辑中的同名主打歌《一场游戏一场梦》、《安妮》等歌曲直到今天依然是KTV点唱率非常高的歌曲。 点击上方播放视...... 2022-12-24 刀郎的新歌《罗刹海市》最近引起了轰动,但这次不是因为它的音乐本身有多么好听或传唱度有多高,而是因为歌词被许多网友解读为内涵了那英、汪峰、杨坤和高晓松等名人,引发了广泛的兴趣和热议。   歌词中的一些词汇和意象被认为与这些名人的特点和经历有关,网友们纷纷展开联想,将歌词与这些名人一一对应起来。那英被指歌词中“那又鸟”所指,杨坤被描述为“马户”,高晓松被称为“拿扇子的公公&r...... 2023-08-03 HTML5是HTML的最新版本,引入了一系列新的元素、属性和API,使得开发者可以创建更强大、更交互性的Web页面。以下是HTML5新手入门指南的一些建议:   1. 基础结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="...... 2015-02-18 没开发布会,没有预告就直接开卖备受关注的旗舰手机,华为Mate60系列算是开了个头。这几天华为登上了热搜,这次是因为华为Mate60手机携带“麒麟芯片”提前开售,瞬间售罄,同时也标志着麒麟5G芯片的正式回归。这一消息在各大主流媒体平台上迅速引发热议,网友们纷纷发表意见,自媒体人也争相蹭热度,提出各自观点。   如果你打开华为商城app,可以看到华为已经在自家商城上架了华为Mate60系列手机,而这些手机已经...... 2023-08-31 王冰冰是央视近年来力推的知名记者,她以初恋般的清纯可爱的外貌形象走红,被称为“央视收视密码”。走红后的王冰冰也被受邀参加了很多节目和活动,她本人的自媒体账号也收获了500万的粉丝。   不过,人红事非多,近日,就有人爆出了王冰冰大量的个人隐私内容,她早年英语四级成绩只有369分。考了两次才合格。爆料中还提到王冰冰其实早就结过婚了,并且现在属于离婚状态。还说王冰冰19岁就和男友同居,后来被甩了,嫁给了吉林...... 2022-01-24 在PHP中,类(Class)和对象(Object)是面向对象编程的核心概念。类是创建对象的蓝图或模板,而对象则是类的实例。通过使用类和对象,可以模拟现实世界中的情况,并封装相关的属性和方法。   下面是一个简单的示例,展示了如何在PHP中定义一个类和创建对象: class Car { // 属性 public $color; public $speed; // 方法 ...... 2018-05-28