公告:如果您的账号不能登录,可能是系统对您账号进行了保护,我们发现系统中存在着不安全密码,故对其重置,请您重新激活账号,对于给您造成的不便,敬请谅解!
论坛风格切换切换到宽版
  • 9018阅读
  • 14回复

[分享]关于新版缩略图问题的解决办法 [复制链接]

上一主题 下一主题
离线lblzy
 

发帖
38
贡献值
0
威望值
37
技术分
0
织梦币
0
只看楼主 倒序阅读 使用道具 0 发表于: 2008-10-05
前段时间刚刚开始捣鼓新版本5.1freeSP1,缩略图问题困扰我好几天,搜索了半天也没找到我的相关问题。
偶菜鸟一个,费了好大劲才搞成我想要的效果,给大家分享一下,希望对像我一样的菜菜们有所帮助。


问题1. 勾选 “提取第一张图片为缩略图”
实际是将第一张图当作缩略图 并没有生成带"_lit"的小图


上传图片时对话框中的的“生成缩略图”功能虽然可以生成缩略图,但就会在文章中插入了缩略图,而并非原图,你必须复制缩略图地址,然后去掉_lit,点原始,确定后再将缩略图地址粘贴到 上面的缩略图地址中,麻烦死了,记得4.X的时候就不用这样,所以参考4.X作了修改


需修改文件:\dede\action\article_add_action.php
先看原代码

  1. //自动获取缩略图
  2. if($autolitpic==1 && $litpic==''){
  3. $litpic = GetDDImgFromBody($body);
  4. }


我也不懂这些代码 不过我想大概意思应该就是“缩略图=获取图像从主题内容”
也就是上面说的实际是第一张原图 这就是问题所在
我参考了4.X里提取缩略图代码,更改为:

  1. //自动获取缩略图-改
  2. if($autolitpic==1 && $litpic==''){
  3. $cfg_medias_dir = str_replace('/','\/',$cfg_medias_dir);
  4. $picname = preg_replace("/.+?".$cfg_medias_dir."(.*)( |\"|').*$/isU",$cfg_medias_dir."$1",$body);
  5. if(eregi("\.(jpg|gif|png)$",$picname)){
  6. if(ereg("_lit\.",$picname)) $litpic = $picname;
  7. else $litpic = GetDDImage('ddfirst',$picname,0);
  8. }
  9. }


同理\dede\action\article_eidt_action.php更改为:

  1. //自动获取缩略图-改
  2. if($autolitpic==1 && empty($litpic)){
  3. $cfg_medias_dir = str_replace('/','\/',$cfg_medias_dir);
  4. $picname = preg_replace("/.+?".$cfg_medias_dir."(.*)( |\"|').*$/isU",$cfg_medias_dir."$1",$body);
  5. if(eregi("\.(jpg|gif|png)$",$picname)){
  6. if(ereg("_lit\.",$picname)) $litpic = $picname;
  7. else $litpic = GetDDImage('ddfirst',$picname,0);
  8. }
  9. }


然后将这两个文件 复制覆盖到\dede\下。
OK!这样就能打到勾选“提取第一张...”生成缩略图的目的了。

问题2. 缩略图变形

参考早先咱们坛里一哥们的办法弄的,是根据判断缩略图宽或高缩放图片,后居中裁剪的原理。

需修改文件:\include\inc_photograph.php

①找到:

  1. if($toWH<=$srcWH){
  2. $ftoW=$toW;
  3. $ftoH=$ftoW*($srcH/$srcW);
  4. }
  5. else{
  6. $ftoH=$toH;
  7. $ftoW=$ftoH*($srcW/$srcH);
  8. }


改为:

  1. $ftoH=$toH;
  2. $ftoW=$toW;
  3. if ($toWH<=$srcWH) {
  4. $src_Y = 0;
  5. $src_X = ($srcW-$srcH*$toWH)/2;
  6. $srcW = $srcH*$toWH;
  7. } else {
  8. $src_X = 0;
  9. $src_Y = ($srcH-$srcW/$toWH)/2;
  10. $srcH = $srcW/$toWH;
  11. }


②找到:($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH); 共三处。
改为:($ni,$im,0,0,$src_X,$src_Y,$ftoW,$ftoH,$srcW,$srcH);


修改了缩图函数,就能在原图中截取居中的、最大面积的符合自定义缩略图长宽比列的一部分生成缩略图。
OK!~~成功。
[ 此帖被lblzy在2008-10-05 18:10重新编辑 ]
离线ninjasee

发帖
86
贡献值
10
威望值
41
技术分
0
织梦币
0
只看该作者 1 发表于: 2008-10-07
好贴
 
离线52php

发帖
905
贡献值
54
威望值
414
技术分
0
织梦币
0
只看该作者 2 发表于: 2008-10-07
呵呵,技术贴,好人好功夫
 
无语
离线axin0418
发帖
39
贡献值
1
威望值
22
技术分
0
织梦币
0
只看该作者 3 发表于: 2008-10-07
这帖我要顶,很多人都问这个问题!
离线lovelian

发帖
255
贡献值
42
威望值
92
技术分
0
织梦币
0
只看该作者 4 发表于: 2008-10-08
帮顶~  这帖 版主要加分啊
离线chmdyu

发帖
166
贡献值
148
威望值
84
技术分
0
织梦币
0
只看该作者 5 发表于: 2008-10-08
我收藏了,以备后用。谢谢楼主分享。
离线cnfang
发帖
127
贡献值
9
威望值
104
技术分
0
织梦币
0
只看该作者 6 发表于: 2008-10-09
有没有演示呢?
http://www.ebaiyi.com    天津网站建设! 接受风格定制! QQ:5148338
离线lblzy

发帖
38
贡献值
0
威望值
37
技术分
0
织梦币
0
只看该作者 7 发表于: 2008-10-09
引用第6楼cnfang于2008-10-09 11:09发表的  :
有没有演示呢?


演示 还没有,网站还没弄完呢
可以上张本地测试截图看看

左边是没有修改的  右边图 是修改后的
1条评分
玩家 威望值 +7 感谢共享,上面评不了分 .. 2008-10-09
离线sun979
发帖
131
贡献值
10
威望值
103
技术分
0
织梦币
0
只看该作者 8 发表于: 2008-10-12
关于缩略图,我的修改后还是无法生成啊。
离线xiaolelele
发帖
92
贡献值
0
威望值
55
技术分
0
织梦币
0
只看该作者 9 发表于: 2008-10-13
第2个方法很好使啊,谢谢