这个坑这几天必须给填掉... - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lhj2100
V2EX    PHP

这个坑这几天必须给填掉...

  •  
  •   lhj2100 2012-11-24 14:20:44 +08:00 5319 次点击
    这是一个创建于 4753 天前的主题,其中的信息可能已经有所发展或是发生改变。
    原帖在 http://www.v2ex.com/t/38590


    从一个页面上传一个图片 文件 JPG bmp 图片限制2M以内
    然后用PHP 处理图片 分析图片尺寸 若图片为800*600 则分割成198*198的图片 12个 并显示出来

    每张图片抛弃2px;
    第一张图片对应原图片 左上角0,0,右下角198,198,第2张图片左上角200,0 右下角398,198

    因为我对PHP不熟悉 网上又找不到类似的代码可供研究 又或者是SAE 的运行环境比较另类

    我在某个代码上卡住了

    isfeel.sinaapp.cm/upload/index.html

    上传后生成的图片有黑色的边 而不是我想要的效果

    代码如下
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" cOntent="text/html; charset=" />
    <title>html5 example: IMG Preview</title>
    </head>
    <body>
    <?php
    $s = new SaeStorage();
    $name =$_FILES['viewFiles']['name'];

    if ((($_FILES["viewFiles"]["type"] == "image/gif")
    || ($_FILES["viewFiles"]["type"] == "image/jpeg")
    || ($_FILES["viewFiles"]["type"] == "image/pjpeg"))
    && ($_FILES["viewFiles"]["size"] < 2000000))
    {
    if ($_FILES["viewFiles"]["error"] > 0)
    {
    echo "错误代码: " . $_FILES["viewFiles"]["error"] . "<br />";
    }
    else
    {
    echo "文件名称: " . $_FILES["viewFiles"]["name"] . "<br />";
    echo "文件类型: " . $_FILES["viewFiles"]["type"] . "<br />";
    echo "占用空间: " . ($_FILES["viewFiles"]["size"] / 1024) . " Kb<br />";
    echo "缓存地址: " . $_FILES["viewFiles"]["tmp_name"] . "<br />";
    $tmpfile=$_FILES["viewFiles"]["tmp_name"];
    $tempcache=$_FILES["viewFiles"]["tmp_name"];

    list($current_width, $current_height) = getimagesize($tmpfile);
    echo "图片尺寸:".$current_width."X".$current_height."<br/>";
    echo "操作完成..<br/>";

    if ($current_width>200 || $current_width<2500 || $current_height>200 || $current_height<1500)
    {

    $left = 0;
    $top = 0;

    $crop_width = 198;
    $crop_height = 198;


    for ($i =1; $i<=9;$i++)
    {

    $canvas =imagecreatetruecolor($crop_width, $crop_height);

    $current_image =imagecreatefromjpeg($tmpfile);
    imagecopy($canvas, $current_image, 0, 0, $left, $top,$current_width, $current_height);

    imagejpeg($canvas,$tempcache,85);

    $targetfile=$i.".jpg";
    $s->upload("upload",$targetfile,$tempcache);
    $imgurl=$s->getUrl("upload",$targetfile);
    echo "<img src='".$imgurl."?".time()."'/>";
    imagedestroy($canvas);
    imagedestroy($current_image);

    $left+=3;
    $top+=3;

    }
    }
    else
    {
    echo "图片宽度小于200 或 大于3500像素";
    echo "图片高度小于200 或 大于3500像素";
    echo $current_width.$current_height;
    }


    //}
    }
    }
    else
    {
    echo "图片不符合规范 JPG 2M字节以下";
    }
    ?>
    </body>
    </html>

    经过UPlaod.php处理的图片 是有黑边的
    事情进行到这里就彻底卡住了 进行不下去了
    然后又去玩网游去了


    直到今天才想起来 还有这个坑没填上
    所以想请V2ex上的朋友帮帮忙
    要是再让我回到网游上边去 可能又要几个月才想得起来了
    我这里 召唤一些大神们
    @CoX
    @zythum
    @liyandong
    @liyandong
    @no2x
    @galaxy11
    @shiren1118
    @twor2
    @shiren1118
    @blank_dlh
    @jo32
    @flyingnn
    @jo32
    @javaluo
    @xmbaozi
    @66
    @wdd2007
    @chaojie
    @shiren1118
    @66
    @Even
    @l0wkey
    @yujnln
    @Bob
    12 条回复    1970-01-01 08:00:00 +08:00
    Bob
        1
    Bob  
       2012-11-24 20:28:29 +08:00   1
    我都成大牛了---作惊恐状
    菜鸟中菜鸟回答不了你上面的问题
    另外你的链接打不开
    lhj2100
        2
    lhj2100  
    OP
       2012-11-24 21:25:17 +08:00
    我并不是想有谁能够给我直接的答案 只是不太理解关键几句代码的执行方式
    想找个高手来帮忙指导一下
    $canvas =imagecreatetruecolor($crop_width, $crop_height);
    $current_image =imagecreatefromjpeg($tmpfile);
    imagecopy($canvas, $current_image, 0, 0, $left, $top,$current_width, $current_height);
    imagejpeg($canvas,$tempcache,85);

    javaluo
        3
    javaluo  
       2012-11-24 21:45:24 +08:00
    http://bbs.9ria.com/thread-19017-1-1.html
    需要背景透明?

    PS: 我不是大神 - -
    chaojie
        4
    chaojie  
       2012-11-24 21:52:31 +08:00
    imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。
    看到黑色了吧?

    $left+=3;
    $top+=3;
    这当然只能是你的效果,因为它是3

    imagejpeg($canvas,$tempcache,85)
    貌似你在循环时把文件覆盖成新的小图了
    lhj2100
        5
    lhj2100  
    OP
       2012-11-24 22:01:11 +08:00
    @chaojie 原图像 不是$current_image 这个变量保存着的吗?
    chaojie
        6
    chaojie  
       2012-11-24 22:04:05 +08:00
    $current_image =imagecreatefromjpeg($tmpfile);
    你写在for里面了


    @javaluo 这个是flex的
    lhj2100
        7
    lhj2100  
    OP
       2012-11-24 22:10:55 +08:00
    我把我对代码的理解说一下 您看对不对

    $canvas =imagecreatetruecolor($crop_width, $crop_height);
    //此时$canvas 是一个黑色的198×198的图片

    $current_image =imagecreatefromjpeg($tmpfile);
    //此时$current_image 是我上传的那张图片

    imagecopy($canvas, $current_image, 0, 0, $left, $top,$current_width, $current_height);

    //这里将我上传的那张图片 切割 从$left ,$top到$current_width ,$current_height 那一部分切割下来 安在 $canvas 的0,0 位置

    imagejpeg($canvas,$tempcache,85);
    //这里将 $canvas 图片 以85%的质量 复制给$tempcache

    @chaojie 对吗
    lhj2100
        8
    lhj2100  
    OP
       2012-11-24 22:15:00 +08:00
    @chaojie

    $current_image =imagecreatefromjpeg($tmpfile);

    $tmpfile 一直都在变化着的么?

    $tmpfile 在for 里就不是 $_FILES["viewFiles"]["tmp_name"]; 的值了么?
    chaojie
        9
    chaojie  
       2012-11-24 22:22:33 +08:00   1
    filepath only

    $tmpfile=$_FILES["viewFiles"]["tmp_name"];
    $tempcache=$_FILES["viewFiles"]["tmp_name"];

    变量虽不同,是同一个字符串
    lhj2100
        10
    lhj2100  
    OP
       2012-11-24 22:25:37 +08:00
    试着将
    $canvas =imagecreatetruecolor($crop_width, $crop_height);

    $current_image =imagecreatefromjpeg($tmpfile);


    imagedestroy($canvas);
    imagedestroy($current_image);

    移动到循环之外就解决问题 了..
    但是还是不理解...
    lhj2100
        11
    lhj2100  
    OP
       2012-11-24 22:32:57 +08:00
    @chaojie
    赋值是从右往左的吧
    $tmpfile=$_FILES["viewFiles"]["tmp_name"];

    $tempcache=$_FILES["viewFiles"]["tmp_name"];

    不过好像我用的时候在最后 将$tempcache 这个字符变量 强制转换成了一个图像对象
    就是这一句
    imagejpeg($canvas,$tempcache,85);
    这一句结束之后 $tempcache 是个什么类型的变量
    如果不再是字符型
    如何事先实现声明一个对象 装载 该句的运行结果..
    lhj2100
        12
    lhj2100  
    OP
       2012-11-30 11:17:47 +08:00
    终于填完了 就不另外开贴宣传了
    地址在 http://isfeel.sinaapp.com/upload/
    IE什么的访问有问题
    CHORME 就没问题...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2620 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 09:15 PVG 17:15 LAX 01:15 JFK 04:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86