minecraftcodex/utils/miner/textures.py

96 lines
2.9 KiB
Python

#!/usr/bin/env python
# General libs
from os import listdir, environ
from os.path import isfile, join
from sys import path
import json
from PIL import Image
# Tool libs
import utils
import conf
from objects import GameTexture
utils.title("TEXTURES")
if conf.SAVE:
path.append('../../minecraftcodex')
environ['DJANGO_SETTINGS_MODULE'] = 'local_settings'
from database.models import Texture
TEXTURES = []
# Old textures for final count
try:
OLD_TEXTURES = json.loads(open('textures.json').read())
except:
OLD_TEXTURES = {}
OLD_TEXTURES['list'] = []
for path in conf.TEXTURES_PATHS:
# GO!
for f in listdir(path):
if isfile(join(path, f)):
if conf.SAVE:
# Copy original image
destiny_path = '../../minecraftcodex/database/static/%s' % join(path, f).\
replace('jarfile/', '')
destiny = open(destiny_path, 'w+')
destiny.write(open(join(path, f)).read())
destiny.close()
# making more sizes for the site
try:
modified = Image.open(destiny_path)
for multiplier in conf.TEXTURES_EXTRA_SIZES_MULTIPLIER:
sizes = (modified.size[0] * multiplier, modified.size[1] * multiplier)
modified_path = destiny_path.replace('.png', '_x%d.png' % multiplier)
resized = modified.resize(sizes, Image.NEAREST)
resized.save(modified_path, 'PNG')
except IOError:
pass
TEXTURES.append(
GameTexture(
f,
path.replace('jarfile/textures/', ''),
join(path, f).replace('jarfile/textures/', '')
)
)
if conf.SAVE:
for texture in TEXTURES:
try:
item = Texture.objects.get(
name=texture.name,
type=texture.type
)
except Texture.DoesNotExist:
item = Texture(
name=texture.name,
type=texture.type,
image=texture.path
)
item.save()
# SUMMARY
new_old_data = {}
new_old_data['list'] = []
[new_old_data['list'].append(x.name) for x in TEXTURES]
new_items = len(new_old_data['list'])-len(OLD_TEXTURES['list'])
utils.info('Found %d textures (%d new)' % (len(TEXTURES), new_items))
if new_items != 0:
utils.sub('Modifications', end='\n')
for item in TEXTURES:
if item.name not in OLD_TEXTURES['list']:
utils.sub(' + %s' % item.name, end='\n', color=utils.colors.GREEN)
for item in OLD_TEXTURES['list']:
if item not in new_old_data['list']:
utils.sub(' - %s' % item, end='\n', color=utils.colors.RED)
olditems = open('textures.json', 'w')
olditems.write(json.dumps(new_old_data))