XPERIA用の壁紙を自動生成
今更docomo用のスマートフォンXPERIAを購入(ヤマダ電気で, モロモロの値引きを使用して, 3万円弱でした)。
とりあえず、壁紙を作ってみました。
XPERIA用壁紙の仕様
- 960ピクセル×854ピクセル(結構大きい)
- ステータスバーで上部30ピクセルが隠れる
- アプリケーションバーで下部50ピクセルが隠れる
実際には仮想デスクトップが5枚あるので、一度に見えるのは全体の一部だけ
したがって、一枚絵というか、キャラクターがバーンと中央にいるイラストなどは、切れてしまいます。幾何学模様的な絵の方が良さそうです。
BMPやPNGも、JPEGに変換されてから使われる?
JPEGでは、単色で塗りつぶした四角形などは、圧縮時にディザがかかるので、綺麗に見えません。
グラデーションがある曲線中心のデザインを使いましょう。
Pythonで、PySideを使って、自動生成してみます。
どこかでみたような、ソコソコよさげな壁紙が出来ました。
#encoding: shift-jis
#spheres-wallpaper.py
from __future__ import division, print_function, unicode_literals
from PySide.QtGui import *
from PySide.QtCore import *
import random
from colorsys import *
def lighter(color):
r, g, b = color.red()/255, color.green()/255, color.blue()/255
h, s, v = rgb_to_hsv(r, g, b)
v *= 1.3
r, g, b = hsv_to_rgb(h, s, v)
return QColor(
min(int(r*255), 255),
min(int(g*255), 255),
min(int(b*255), 255),
)
def drawSphere(painter, pos, radius, color):
Delta = 2
pen = painter.pen()
pen.setColor(color)
pen.setWidth(Delta + 1)
painter.setPen(pen)
rc = QRect(pos - QPoint(radius, radius), QSize(2*radius, 2*radius))
for i in xrange(10):
rc = rc.translated(Delta, Delta)
rc.setSize(rc.size() - QSize(Delta*2, Delta*2))
painter.drawArc(rc, 0, 360*16)
pen.setColor(lighter(pen.color()))
painter.setPen(pen)
def main():
app = QApplication([])
width = 960
height = 854
im = QImage(width, height, QImage.Format_ARGB32)
painter = QPainter(im)
painter.setRenderHint(QPainter.Antialiasing)
painter.setBackground(QColor("white"))
painter.eraseRect(im.rect())
spheres = []
for i in xrange(1000):
r = random.uniform(10, 70)
p = QPoint(random.randrange(width),
random.randrange(height))
if all((p.x() - p1.x())**2 + (p.y() - p1.y())**2 > (r + r1)**2 for p1, r1 in spheres):
spheres.append((p, r))
for i, (pos, radius) in enumerate(spheres):
h = random.uniform(0, 1)
s = .6
v = .8
color = QColor(*[int(i *255) for i in hsv_to_rgb(h, s, v)])
drawSphere(painter, pos, radius, color)
im.save("spheres.png")
del painter
if "__main__" == __name__:
main()
