V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
fffflyfish
V2EX  ›  Python

最近在做一个生产广告的小 demo,遇到元素冲突的问题,求解决方案

  •  
  •   fffflyfish ·
    FormatFish · 2016-11-12 16:43:36 +08:00 · 2589 次点击
    这是一个创建于 2720 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,这两天老板让做个广告生成器,就类似购物网站的 banner ,从设计的角度来看,生成一个广告是需要遵守很多设计规则的,我在这里筛选了留白,视觉平衡等几个常见的规则来做的,但是现在生成的如下图: 06465F70-D980-4B64-BEAE-CE4206763EF4.jpg 就是发生元素之间重叠冲突的,而我理想的生成的东西应该类似这样: 77A0B09E-50B9-4BAA-AE6C-25A6882474E6.jpg

    或者是这样 F49C5399BED5F57B1F6ED237D73D55F7.png

    所以现在想解决的问题就是在遵守我自己定义的规则前提下怎么避免元素之间的重叠冲突?有没有相关的优化算法。

    Ps :用的是 python 的 PIL 做的。因为这个问题涉及到算法,数学,设计方面,放在这个节点下没问题吧。

    第 1 条附言  ·  2016-11-13 10:57:14 +08:00

    谢谢各位前辈和同行的回复,昨天找到一篇文献和我的问题相关度比较高,算是得到一个不错的解决方案了吧,论文如下

    文献

    O’Donovan P, Agarwala A, Hertzmann A. Learning layouts for single-pagegraphic designs[J]. IEEE transactions on visualization and computer graphics, 2014, 20(8): 1200-1213.

    论文链接

    http://cloud.cethik.vip/index.php/s/daVFuTxu48kxBlZ

    这篇文章综合考虑了视觉平衡,元素重要度,元素对齐检测,布局优化(NIO算法)来进行图片设计,其中related work也有不少有意思的文献比如网页的响应式设计研究现状,有兴趣的各位可以看看。

    再次感谢各位

    17 条回复    2016-11-13 11:09:17 +08:00
    fffflyfish
        1
    fffflyfish  
    OP
       2016-11-12 16:49:37 +08:00
    之前问过人,有人说这是凸优化里的一个经典的布局和定位问题,但是查了下感觉不是很符合要求
    fffflyfish
        2
    fffflyfish  
    OP
       2016-11-12 16:50:22 +08:00
    然后看了下游戏引擎里面的冲突避免和碰撞检测,感觉有那么点关系,但是我并不是很擅长这个领域,求大神
    onlyhot
        3
    onlyhot  
       2016-11-12 18:51:36 +08:00 via iPhone
    根据你提供的条件,我看着就像打水印。计算图片的高度宽度,再按照合适的方案安排文字。
    fffflyfish
        4
    fffflyfish  
    OP
       2016-11-12 19:49:33 +08:00
    @onlyhot 水印的话位置应该没有那么多讲究,但是在设计师设计广告的时候会遵循很多设计规范的,比如对齐啦,留白啦这些东西,而且你看我生成的第一个方案就很丑,因为元素之间冲突了,我想做的是想让这些元素不要重叠冲突,而且前提是遵守我预定义的规则。 不知道我说清楚了么。。。
    ovear
        5
    ovear  
       2016-11-12 19:56:33 +08:00
    没这么麻烦吧。。用
    1 、(字高+行距)* 行数
    2 、(字宽+间距)* 字数

    来分别定位。。不就行了
    fffflyfish
        6
    fffflyfish  
    OP
       2016-11-12 20:14:08 +08:00
    @ovear 没懂,你这样只是知道了一段文字对应的像素长宽,如何避免出现类似我上传的第一张图那种情况?
    helloccav
        7
    helloccav  
       2016-11-12 20:14:26 +08:00
    请问一下,广告要遵守的设计规则,例如留白,视觉平衡等,这些东西在看什么书、什么网站、什么教材可以学到呢?
    可以推荐一些网上的教材或者纸质书吗?
    谢谢。
    ovear
        8
    ovear  
       2016-11-12 22:52:57 +08:00
    @fffflyfish 你的图片素材的绘图原点(一般是左上角,由你算出来的 x , y 决定。这样就不会重叠了)
    designer
        9
    designer  
       2016-11-13 00:30:35 +08:00 via iPhone
    如果设计真的能生成就好了。
    onlyhot
        10
    onlyhot  
       2016-11-13 00:32:52 +08:00 via iPhone
    @fffflyfish 图片和文字的位置都是你可以控制的。总的宽度高度知道,图片的宽度和高度知道,算出图片左上角的坐标。就知道剩余的留白的位置了啊。然后再安排文字。
    srlp
        11
    srlp  
       2016-11-13 07:16:20 +08:00
    把整个图片界面划分成格子 ( grid ),然后设计好文字图片等占据那些格子,算法上就很容易保证不重叠了吧。
    fffflyfish
        12
    fffflyfish  
    OP
       2016-11-13 10:41:17 +08:00   ❤️ 1
    @helloccav 我主要获取渠道是看论文,就是在谷歌学术上搜图片,审美一类的关键字,有不少人在做的。随便找一篇,然后看一下 related work,就能找到不少你想要的
    fffflyfish
        13
    fffflyfish  
    OP
       2016-11-13 10:48:19 +08:00
    @ovear
    @onlyhot
    可能是我问题没有表述清楚,因为现在不只是重叠冲突的问题,因为我的生成器是需要满足一些自定义的设计规则,就比如对齐吧,在保证元素左对齐或者上对齐的情况下避免重叠,这个就设计一个对齐检测的东西,再比如一个视觉平衡的规则,要求每个元素的重心在规定好的位置的前提下避免重叠,就好像本科学的拉格朗日乘数法,是要在函数的自变量满足一定的约束条件下求解函数的最优值。。。不知道我说清楚了么。。。

    我昨天没有回复是因为找了一晚上的文献,不好意思哈,这是我找到的一个不错的方案
    O ’ Donovan P, Agarwala A, Hertzmann A. Learning layouts for single-pagegraphic designs[J]. IEEE transactions on visualization and computer graphics, 2014, 20(8): 1200-1213.
    @srlp
    这个方法不错诶,我之前看游戏里面的碰撞检测的时候也是怎么做的,厉害!

    我昨天没有回复是因为找了一晚上的文献,不好意思哈,这是我找到的一个不错的方案
    O ’ Donovan P, Agarwala A, Hertzmann A. Learning layouts for single-pagegraphic designs[J]. IEEE transactions on visualization and computer graphics, 2014, 20(8): 1200-1213.
    fffflyfish
        14
    fffflyfish  
    OP
       2016-11-13 10:49:53 +08:00
    @designer 是呀,关键是要把这些设计规范和设计原则转化成数学建模,类似网页的那种响应式设计,我这个昨天找到了一个不错的解决方案,是一篇论文:
    O ’ Donovan P, Agarwala A, Hertzmann A. Learning layouts for single-pagegraphic designs[J]. IEEE transactions on visualization and computer graphics, 2014, 20(8): 1200-1213.
    Aether
        15
    Aether  
       2016-11-13 10:57:05 +08:00 via iPhone
    很简单…你只需要研究一下 css 然后自己再实现一次, 4/!后使用里面的 float 属性。当然你也可以单纯实现这个属性。
    fffflyfish
        16
    fffflyfish  
    OP
       2016-11-13 11:03:08 +08:00
    @Aether 你的意思是模拟 css 的 float 属性?诶,突然感觉这是个不错的 idea !让我想想怎么模拟,因为有些东西在网页设计里很容易实现(标签很方便),但是在海报图片设计方面就比较难应用。。。
    fffflyfish
        17
    fffflyfish  
    OP
       2016-11-13 11:09:17 +08:00
    @designer 现在我看很多发论文的讨论都是通过把以前不可量化的东西现在用某种方式量化,然后出一篇论文的,记得有一个朋友就是把用户使用手机的用户体验分解成几个维度量化了下,发了篇论文。事实上如果有成熟的规范或者规则的话,设计应该也离自动化不远了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1168 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:30 · PVG 02:30 · LAX 11:30 · JFK 14:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.