用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6678|回复: 11
收起左侧

创建缩略图时遇到的问题

[复制链接]
发表于 2008-6-22 16:14:07 | 显示全部楼层 |阅读模式
在生成缩略图的时候,发现缩略图失真。

原始图片

原始图片

缩略图

缩略图
发表于 2008-6-22 23:59:36 | 显示全部楼层
失真这么严重,呵呵~
看看是不是设置有问题,CI 也是使用的外部图形库嘛~
发表于 2008-6-24 18:06:35 | 显示全部楼层
ME 2.....没有解决。。。。手动用工具生了。。。
发表于 2008-6-25 08:44:40 | 显示全部楼层

CI中把HEX转换为RGB算法有误

CI中把HEX转换为RGB算法有误,或者说,算法并不完全。(明了人一看那种字符串转换方式肯定很初级,且易出错)

并且,CI的image_lib是用了三套图形库的代码,完全违背了面向对象的原则.
发表于 2008-6-25 09:32:18 | 显示全部楼层
楼上发布一个 patch  吧!期待~呵呵
发表于 2008-6-25 13:03:50 | 显示全部楼层

色彩转换,可以提供代码

类库是没办法改了,除了写新的,色彩转换吗,可以提供代码
我在另一框架中也发现了这一问题。所以,这里直接给出色彩转换函数的链接:
http://www.fleaphp.org/bbs/viewt ... &extra=page%3D1
发表于 2008-6-25 13:07:54 | 显示全部楼层
试试:将Ci_image_lib类中 hex色彩转RGB的代码部分,改为调用上面的函数,再看看结果是怎样的。注意,上面的函数名沿用了那一框架中的原函数名,引到CI中,建议改为 hex_to_rgb,这样符合CI的标准
发表于 2008-6-25 13:24:59 | 显示全部楼层
感谢楼上的解决方案,我先贴到这里!
PHP复制代码
 /**
* 将十六进制表示的颜色值转换为 rgb
*
* @param string $color
* @param string $default
*
* @return array
*/

function extractColor($color, $default = 'ffffff')
{
$color= trim($color, '#&Hh');
$len = strlen($color);
if ($len == 3) {
$color= "{$color[0]}{$color[0]}{$color[1]}{$color[1]}{$color[2]}{$color[2]}";
$len = 6;
}
if (($len < 6)&&($len % 2 == 1)) {
$color= $default;
}
else
{
$color .=str_repeat('0',6-$len)
}
if(! preg_match('/^[a-fA-F0-9]{1,6}$/', $color))
                 $color= $default;
$dec = hexdec( $color);
return array(($dec >> 16) & 0xff, ($dec >> 8) & 0xff, $dec & 0xff);
//return array('r' => ($dec >> 16) & 0xff, 'g' => ($dec >> 8) & 0xff, 'b'=>$dec & 0xff);
}
复制代码
发表于 2008-6-27 14:04:58 | 显示全部楼层
经过我自己的测试,图像颜色失真不是 CI 的 BUG!
是使用 GD 库和 GD2 库之间的区别!使用 GD 有失真,使用 GD2  没有失真。

关于颜色转换,好像只有在水印部分才有,其他地方不涉及颜色换算。
发表于 2008-6-27 14:11:16 | 显示全部楼层
非常感谢!(不过这个有BUG的论坛还不让人少发几个字!)

本版积分规则