微信聊天图片大小生成算法~

2017-08-15 19:11:41 +08:00
 deepkolos

今天仿微信聊天时候的图片大小 , 描了十几个点 , 用了半个早上的苦力时间 , 把结果分享一下下~

描点过程: 笨方法~

  1. PS 生成对应规格的图片
  2. 发送到手机微信
  3. 截图 ,发送回电脑 用 PS 记录大小

描点数据:

注: 40 表示的是宽高比为 40% 也就是 0.4
40 -> 203 509
41 -> 203 498
42 -> 203 481
43 -> 203 476
44 -> 203 460
45 -> 203 452
46 -> 203 438
47 -> 203 435
48 -> 203 419
49 -> 203 416
50 -> 203 407
51 -> 203 407

52 -> 209 405
55 -> 219 405
60 -> 243 405
70 -> 283 405
80 -> 324 405
90 -> 364 405
100-> 405 405

110-> 405 364
120-> 405 337

那么很显然了规律

还有使用测试图片得到的数据

那么算法就很容易看出来了 , 代码如下

//根据宽高比来设置外框的 size
if (ratio < 0.4 ){
  width = 204; //这是从微信截图的长度最后需要同一除以 3
  height = 510;
  $img.parentElement.classList.add('overflowHeight'); //设置高度溢出部分隐藏
}else if(ratio >= 0.4 && ratio <= 0.5){
  width = 204;
  height = 204/ratio;
} else if(ratio > 0.5 && ratio < 1) {
  width = 405 * ratio;
  height = 405;
} else if(ratio >= 1 && ratio < 1/0.5) { //和前面的宽高转置
  height = 405 * (1/ratio);
  width = 405;
} else if (ratio >= 1/0.5 && ratio < 1/0.4) {
  height = 204;
  width = 204 / (1/ratio);
} else if (ratio >= 1/0.4) {
  height = 204; //这是从微信截图的长度最后需要同一除以 3
  width = 510;
  $img.parentElement.classList.add('overflowWidth');
}
height /= 3;
width /= 3;

那么最终效果如下~

8123 次点击
所在节点    程序员
11 条回复
zpvip
2017-08-15 20:03:18 +08:00
真不错,值得收藏
FanWall
2017-08-15 20:05:00 +08:00
不错 辛苦了
flyingghost
2017-08-15 20:31:16 +08:00
辛苦了!
zizifu
2017-08-15 21:25:00 +08:00
有需要的呀。。。收藏
maypu
2017-08-15 23:59:26 +08:00
不错,很棒
zirconium
2017-08-16 08:21:24 +08:00
不错,蟹蟹
firefox12
2017-08-16 10:37:35 +08:00
细节是魔鬼。需要的就是这样的踏实
deepkolos
2017-08-16 11:11:23 +08:00
@firefox12 谢谢哈~ 说真的微信用起来简单, 直观 , 但是微信的细节不是一般的多 , 并且一些觉得很简单的细节其所支撑的数据都是很多的 , 同时也发现挺多微信的十分多细节的改变 , 比如 6.5.8 到 6.5.10 , 把我的二维码的页面统一使用一个页面来显示了, 之前我的二维码是有 3 个不同的显示方式的 , 应该是代码复用率提高了, 但是还是喜欢原本的显示方式 , 虽然我用得不多

还有我一年半前发现了微信 pen 了, 原本是无法直接看出来的, 但是使用了滑动返回 ,就可以看到了 , 高三暑假的时候发现的

https://www.zhihu.com/question/27428780/answer/70282983

还有有些地方的像临时工做的...比如 6.5.10 版本长按一个聊天消息 ,比如 长按文件传输助手里面的一条消息 , 弹出菜单 , 点击更多 , 点击右上角的搜索按钮 , 这时候的搜索按钮是没有过度动画的...行为上和同类不相同... 我觉得返回的时候应该返回最初的默认状态的
sofs
2017-08-16 11:14:27 +08:00
辛苦了,srmsmy
deepkolos
2017-08-16 11:14:39 +08:00
@firefox12 还有一个地方行为怪怪的 , 就是在聊天窗口里面 查看放大的图片的时候 , 不会添加左右滑动锁... 就是当你左滑一段距离 , 然后再往下滑动 , 一定几率会触发下滑关闭...
deepkolos
2017-08-16 11:25:44 +08:00
微信的图片那个 圆角加上指向头像的小三角的实现也不简单 , 首先圆角 ,我这边是使用 clip-path 的多边形来画的 , 就是圆角部分用多边形来画, 放大之后会出现尖角...目前还没有想到更好的解决办法 , 微信上面有个更吊的地方是这个边框 , 会有一个 1px 的边框 , 但是颜色并非固定的 , 是根据那个图片在边框的位置的像素点的变化而变化的...这个使用前端的东西就很难实现了.

图片贴到这里的后面了在微信 pen 的链接的后面了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/383196

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX