贾玉华
PW 8.7内测组
PW 8.7内测组
  • 发帖数1947
  • 铜币13438两
  • 威望2307点
  • 贡献1点
  • 注册日期2011-02-15
  • 最后登录2017-10-15
  • 社区居民
  • 忠实会员
  • 最爱沙发
阅读:2396回复:21

[求助]远程图片本地化插件如何生成缩略中图?

楼主#
更多 发布于:2017-03-13 11:50
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
http://www.phpwind.net/read/1179128
论坛中有一款远程图片本地化插件,说明下,是插件版的。个人测试感觉,这个比编辑器中集成的“远程图片下载”功能要好用得多,因为后者经常出现下载不了的情况。但插件版的有一个问题,就是不能生成缩略中图,这个不太完美。无奈本人不懂代码,研究了好几天,也尝试修改代码,一直没能实现。有简单的解决思路,但代码不会写,应该是修改remoteimg.class.php这个文件,主要是“处理图片保存相关动作”里面的代码。

通过getimagesize()函数获得图片的宽度,如果大于后台设置的缩略中图生成的宽度(一般高度都是不限制的,等比缩小),那么可以通过调用require/imgfunc.php文件里的Makethumb()函数生成缩略图。

不知道这个解决思路对不对,不知道有哪位大侠能帮忙看下?@元芳 @孤独之虎 @魅柒 @魅惑乐趣
[贾玉华于2017-03-13 16:27编辑了帖子]
贾玉华
PW 8.7内测组
PW 8.7内测组
  • 发帖数1947
  • 铜币13438两
  • 威望2307点
  • 贡献1点
  • 注册日期2011-02-15
  • 最后登录2017-10-15
  • 社区居民
  • 忠实会员
  • 最爱沙发
沙发#
发布于:2017-03-13 11:56
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
魅柒
论坛版主
论坛版主
  • 发帖数1775
  • 铜币17041两
  • 威望934点
  • 贡献0点
  • 注册日期2012-07-14
  • 最后登录2017-09-25
  • 社区居民
  • 忠实会员
  • 最爱沙发
  • 社区明星
板凳#
发布于:2017-03-13 22:17
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
很简单~先获取到本地~在用图像例如gd库的php接口对原图裁切~
贾玉华
PW 8.7内测组
PW 8.7内测组
  • 发帖数1947
  • 铜币13438两
  • 威望2307点
  • 贡献1点
  • 注册日期2011-02-15
  • 最后登录2017-10-15
  • 社区居民
  • 忠实会员
  • 最爱沙发
3楼#
发布于:2017-03-14 09:00
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
魅柒:很简单~先获取到本地~在用图像例如gd库的php接口对原图裁切~回到原帖
对于大神来说,再简单不过的事情,对于我等来说,都是难如登天!加一个简单的判断条件,或者是稍微改动一处代码或许能够做到,但写代码,就完全没可能了。
贾玉华
PW 8.7内测组
PW 8.7内测组
  • 发帖数1947
  • 铜币13438两
  • 威望2307点
  • 贡献1点
  • 注册日期2011-02-15
  • 最后登录2017-10-15
  • 社区居民
  • 忠实会员
  • 最爱沙发
4楼#
发布于:2017-03-14 10:47
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
require/imgfunc.php文件里的类似Makethumb()和modeImageThumb()是不是生成缩略图的函数?如何调用生成缩略图?
function MakeThumb($srcFile, &$dstFile, $dstW, $dstH, $cenTer = null, $sameFile = null, $fixWH = null) {
    global $db_quality;
    $minitemp = GetThumbInfo($srcFile, $dstW, $dstH, $cenTer);
    list($imagecreate, $imagecopyre) = GetImagecreate($minitemp['type']);
    if (empty($minitemp) || !$imagecreate) return false;
    //if ((empty($sameFile) && $dstFile === $srcFile) || empty($minitemp) || !$imagecreate) return false;
    //!empty($sameFile) && $dstFile = $srcFile;
    $imgwidth = $minitemp['width'];
    $imgheight = $minitemp['height'];
    $srcX = $srcY = 0;
    if (!empty($cenTer)) {
        $dsDivision = $imgheight / $imgwidth;
        $fixDivision = $dstH / $dstW;
        if ($dsDivision > $fixDivision) {
            $tmpimgheight = $imgwidth * $fixDivision;
            $srcY = round(($imgheight - $tmpimgheight) / 2);
            $imgheight = $tmpimgheight;
        } else {
            $tmpimgwidth = $imgheight / $fixDivision;
            $srcX = round(($imgwidth - $tmpimgwidth) / 2); 
            $imgwidth = $tmpimgwidth;
        }
    }
    $dstX = $dstY = 0;
    $thumb = $imagecreate($minitemp['dstW'], $minitemp['dstH']);
     
    if (function_exists('ImageColorAllocate') && function_exists('ImageColorTransparent')) {
        //背景透明处理
        $black = ImageColorAllocate($thumb,0,0,0);
        $bgTransparent = ImageColorTransparent($thumb,$black);
    }
 
    $imagecopyre($thumb, $minitemp['source'], $dstX, $dstY, $srcX, $srcY, $minitemp['dstW'], $minitemp['dstH'], $imgwidth, $imgheight);
    MakeImage($minitemp['type'], $thumb, $dstFile, $db_quality);
    imagedestroy($thumb);
    return array(
        $minitemp['dstW'],
        $minitemp['dstH']
    );
}
function modeImageThumb($srcFile, $dstFile, $dstX, $dstY) {
    global $db_quality;
    $imgdata = array();
    list($imgdata['width'], $imgdata['height'], $imgdata['type']) = @getimagesize($srcFile);
    switch ($imgdata['type']) {
        case 1:
            $imgdata['type'] = 'gif';
            break;
        case 2:
            $imgdata['type'] = 'jpeg';
            break;
        case 3:
            $imgdata['type'] = 'png';
            break;
        default:
            return false;
    }
    if (!empty($imgdata) && function_exists('imagecreatefrom' . $imgdata['type'])) {
        $imagecreatefromtype = 'imagecreatefrom' . $imgdata['type'];
    } else {
        return false;
    }
    $imgdata['source'] = $imagecreatefromtype($srcFile);
    !$imgdata['width'] && $imgdata['width'] = imagesx($imgdata['source']);
    !$imgdata['height'] && $imgdata['height'] = imagesy($imgdata['source']);
 
    list($imagecreate, $imagecopyre) = GetImageCreate($imgdata['type']);
 
    $thumb = $imagecreate($dstX, $dstY);
    $color = @ImageColorAllocate($thumb, 255, 255, 255);
    @imagefilledrectangle($thumb, 0, 0, $dstX, $dstY, $color);
 
    $pX = $pY = $pW = $pH = 0;
 
    if ($dstX && !$dstY) {
        $dstY = $imgdata['height'] * $dstX / $imgdata['width'];
    } else if (!$dstX && $dstY) {
        $dstX = $imgdata['width'] * $dstY / $imgdata['height'];
    }
 
    $p = ($dstX / $dstY);
    if ($imgdata['width'] / $imgdata['height'] > $p) { //说明宽度太大
        $pH = $dstY;
        $pW = $pH * $p;
        $imgdata['width'] = $imgdata['height']*$p;
    } else {
        $pW = $dstX;
        $pH = $pW / $p;
        $imgdata['height'] = $imgdata['width']/$p;
    }
 
    $imagecopyre($thumb, $imgdata['source'], 0, 0, 0, 0, $pW, $pH, $imgdata['width'], $imgdata['height']);
    MakeImage($imgdata['type'], $thumb, $dstFile, $db_quality);
    imagedestroy($thumb);
    return 1;
}
贾玉华
PW 8.7内测组
PW 8.7内测组
  • 发帖数1947
  • 铜币13438两
  • 威望2307点
  • 贡献1点
  • 注册日期2011-02-15
  • 最后登录2017-10-15
  • 社区居民
  • 忠实会员
  • 最爱沙发
5楼#
发布于:2017-03-14 10:49
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
代码实在是拼凑不出来,谁能给写一写?
魅惑乐趣
荣誉会员
荣誉会员
  • 发帖数3399
  • 铜币324两
  • 威望4460点
  • 贡献1554点
  • 注册日期2005-05-14
  • 最后登录2017-10-10
  • 社区明星
  • 社区居民
  • 优秀版主奖
6楼#
发布于:2017-03-14 16:13
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
//ruinjoy 缩略图
global $db_ifathumb,$db_athumbsize;
if($db_ifathumb){
    require_once (R_P . 'require/imgfunc.php');
    $ifthumb = $db_ifathumb;
    if ($this->forum->forumset['ifthumb'] == 0) {
        $thumbsize =$db_athumbsize;
    } elseif ($this->forum->forumset['ifthumb'] == 1) {
        $thumbsize =$pwforum->forumset['thumbsize'];
    } elseif ($this->forum->forumset['ifthumb'] == 2) {
        $thumbsize = 0;
        $ifthumb = 0;
    } else {
        $thumbsize = $db_athumbsize;
    }
    if($ifthumb){
        $getThumbInfo = array(
            array($filename, 'thumb/' . $savedir, $thumbsize),
            array($filename, 'thumb/mini/' . $savedir, "200\t150\t$db_athumbtype")
        );
        PwUpload::makeThumb($source, $getThumbInfo, $this->db_ifftp, $ifthumb);
    }
}
//ruinjoy

加这个下面
// 下载图片文件
if (!$this->downFile($value, $source, $ext)) {
    // Showmsg('获取远程图片失败,图片可能不存在,或做了防盗链如果不是上述情况,请检查您的环境配置是否正确!');
} else {
    $ifDone = TRUE;
}
 
if($ifDone) {
jushang6
四星会员
四星会员
  • 发帖数5273
  • 铜币6404两
  • 威望45点
  • 贡献0点
  • 注册日期2013-08-10
  • 最后登录2017-09-05
  • 社区居民
  • 最爱沙发
7楼#
发布于:2017-03-14 17:00
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
完全看不懂,呵呵。
贾玉华
PW 8.7内测组
PW 8.7内测组
  • 发帖数1947
  • 铜币13438两
  • 威望2307点
  • 贡献1点
  • 注册日期2011-02-15
  • 最后登录2017-10-15
  • 社区居民
  • 忠实会员
  • 最爱沙发
8楼#
发布于:2017-03-14 19:46
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
魅惑乐趣://ruinjoy 缩略图
global $db_ifathumb,$db_athumbsize;
if($db_ifathumb){
    require_once (R_P . 'require/imgfunc.php');
...
回到原帖
非常感谢,测试成功!说实话,我是把唯一的希望寄托在了你这儿,没想到你真的去研究而且做到了,我很感动!来官方的人不多了,而且愿望去帮助别人的就更少了,这真的没什么。因为之前,听过一句话,现在还记得:帮你是人情,不帮你是本份。算上上次关于拆分帖不能编辑的问题(虽然我的笨方法也算是解决方案,不过还是你的最好),你至少帮我两次了,说真的,我还是很感谢你!人海茫茫,相聚是缘,可在网络上,你我都是未曾谋面,甚至彼此从没有也可能从不会有交集。也许你觉得没什么,但对于我来说,就是最大的帮助。我想,至少解决这个问题,也得花费你个巴小时左右,你能为一个不相干的人去帮忙,很感谢你!哈哈,打了一些字,总之就是表示感谢!谢谢你!
贾玉华
PW 8.7内测组
PW 8.7内测组
  • 发帖数1947
  • 铜币13438两
  • 威望2307点
  • 贡献1点
  • 注册日期2011-02-15
  • 最后登录2017-10-15
  • 社区居民
  • 忠实会员
  • 最爱沙发
9楼#
发布于:2017-03-14 19:57
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
魅惑乐趣://ruinjoy 缩略图
global $db_ifathumb,$db_athumbsize;
if($db_ifathumb){
    require_once (R_P . 'require/imgfunc.php');
...
回到原帖
补充下,稍后的'ifthumb'        => 0,似乎应该改为'ifthumb'        => $ifthumb,因为ifthumb=0在帖子阅读页调用的是附件原图。如果远程下载的图片宽度比较宽,比如大于800,就会“撑破”帖子内容表格,如果为1(或者3)的话,就是调用缩略中图。
个人理解,说得不准确,大意差不多。
贾玉华
PW 8.7内测组
PW 8.7内测组
  • 发帖数1947
  • 铜币13438两
  • 威望2307点
  • 贡献1点
  • 注册日期2011-02-15
  • 最后登录2017-10-15
  • 社区居民
  • 忠实会员
  • 最爱沙发
10楼#
发布于:2017-03-14 20:03
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
@魅惑乐趣 谢谢你!
魅惑乐趣
荣誉会员
荣誉会员
  • 发帖数3399
  • 铜币324两
  • 威望4460点
  • 贡献1554点
  • 注册日期2005-05-14
  • 最后登录2017-10-10
  • 社区明星
  • 社区居民
  • 优秀版主奖
11楼#
发布于:2017-03-16 16:29
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
贾玉华:补充下,稍后的'ifthumb'        => 0,似乎应该改为'ifthumb'        => $ifthumb,因为ifthumb=0在帖子阅读页调用的是附件原图。如果远程下载的图片宽度比较宽,比如大于800,就会“撑破”帖...回到原帖
是的。需要改成$ifthumb。我忘记加上了。不客气。
贾玉华
PW 8.7内测组
PW 8.7内测组
  • 发帖数1947
  • 铜币13438两
  • 威望2307点
  • 贡献1点
  • 注册日期2011-02-15
  • 最后登录2017-10-15
  • 社区居民
  • 忠实会员
  • 最爱沙发
12楼#
发布于:2017-03-17 09:05
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
魅惑乐趣:是的。需要改成$ifthumb。我忘记加上了。不客气。回到原帖
再次对你所给予的帮助表示深深的感谢!
哆嗦
六星会员
六星会员
  • 发帖数19669
  • 铜币455两
  • 威望3022点
  • 贡献2点
  • 注册日期2006-07-24
  • 最后登录2017-09-20
13楼#
发布于:2017-09-08 23:08
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
你QQ号是?
贾玉华
PW 8.7内测组
PW 8.7内测组
  • 发帖数1947
  • 铜币13438两
  • 威望2307点
  • 贡献1点
  • 注册日期2011-02-15
  • 最后登录2017-10-15
  • 社区居民
  • 忠实会员
  • 最爱沙发
14楼#
发布于:2017-09-09 12:25
系统提示:关于phpwind产品的学习与交流已经迁移到阿里云论坛,请访问这里:https://bbs.aliyun.com/fourms.php?m=bbs&cateid=403
哆嗦:你QQ号是?回到原帖
现在很少登录了,如果有什么事,可以在这里说,我天天都来看看的,看望8.7。
上一页
游客

返回顶部