IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    opencart技巧–宽或高自动计算研究开发思路

    yumanutong发表于 2017-09-04 04:35:19
    love 0

    由于我要开发个模块,模块里需要高度一样,好对齐。宽度又不需要固定,如果不剪切,原图又不是很好,如果客户用的图片太大了加载速度慢。

    那,就是上面这个模块。于是只好改造剪切图片的方法啦。

    跟踪代码

    首先,查看catalog/model/tool/image.php

    从这里读一读代码,这个第一个方法传入了三个参数,分别是指定文件、宽度、高度。然后判断有没有这个文件啊,这个文件路径啊,大小啊日期啊什么的。经过一系列判断后,文件才被剪切,然后把缓存的地址加上config配置的网址返回给处理层。

    然后看到:

    1. $image = new Image(DIR_IMAGE . $image_old);
    2. $image->resize($width, $height);
    3. $image->save(DIR_IMAGE . $image_new);

    查看调用的核心文件 system/library/image.php

    然后可以看到 resize这个方法,这个就是处理的方法啦。可以看到如下代码:

    1. $scale_w = $width / $this->width;
    2. $scale_h = $height / $this->height;
    3. if ($default == 'w') {
    4.     $scale = $scale_w;
    5. } elseif ($default == 'h') {
    6.     $scale = $scale_h;
    7. } else {
    8.     $scale = min($scale_w, $scale_h);
    9. }
    10. if ($scale == 1 && $scale_h == $scale_w && $this->mime != 'image/png') {
    11.     return;
    12. }
    13. $new_width = (int)($this->width * $scale);
    14. $new_height = (int)($this->height * $scale);
    15. $xpos = (int)(($width - $new_width) / 2);
    16. $ypos = (int)(($height - $new_height) / 2);

    重点就在这里啦。要先在这个代码的上面计算好宽度高度。

    计算

    我们来假设一个400*200的图片等比缩小是多少?200*100啊,那么如果高度不给,这个用(小学还是初中学的我也不记得了)方式来求解啊。

    于是得到 x = (200*200) / 400

    解出来不就是 x = 100 吗?

    嗯,逆向求解嘛。高度呢?也同理啊。

    也就是:

    新的宽度 = (旧宽 * 新高) / 旧高

    新的高度 = (旧高 * 新宽) / 旧宽

    写成代码

    从跟代码可以看出四个值的来源,于是乎就写个判断和计算。判断他们的参数是auto的时候,重现计算赋值给左边。代码如下:

    调用方法

    这个嘛,参考上一个文章或看图,三个参数的第二个是宽度,第三个是高度,哪个希望自动,就哪个用auto代替。如图:

    扩展文章

    SDT技术网公开类库及使用说明



沪ICP备19023445号-2号
友情链接