domingo, 23 de agosto de 2009

Extrator de .blend (extract-blend.py)

.exe para .blend

Este script Python extrai um arquivo .blend de dentro de um executável (.exe). Funciona tanto no Blender, como também independentemente dele. Pode também extrair de múltiplos executáveis, de uma só vez. Basta arrastar os executáveis para o script, ou executar o script e digitar o nome do arquivo, para extrair os .blends. Atualizado para o Python 3.

#!/usr/bin/env python3

"""Extract a .blend file of a Windows executable (.exe)
Author:  Ricardo Silva Veloso (ricvelozo)
Website: https://github.com/ricvelozo/scripts
"""

import os
import re
import sys

def extract_blend(executable_url):
    blend_dir, exe_name = os.path.split(executable_url)
    blend_name = exe_name[0:-3] + "blend"

    try:
        executable_file = open(executable_url, "rb")
        print("Processing '" + exe_name + "'...")

        line = b""
        while True:
            line_temp = executable_file.read(1024)
            if line_temp == b"":
                print("The file '" + exe_name + "' does not have a .blend " \
                      "file")
                break

            line = line + line_temp
            pos = re.search(b"BLENDER_[v|V][0-9]{3}REND", line)
            if not pos == None:
                try:
                    blend_file = open(os.path.join(blend_dir, blend_name),
                                      "wb")
                    pos = pos.start()

                    print("Extracting '" + exe_name + "'...")
                    blend_file.write(line[pos:len(line)])

                    while True:
                        line_temp = executable_file.read(1024)
                        if line_temp == b"":
                            break

                        blend_file.write(line_temp)

                    blend_file.close()
                    print(".blend file extracted: '" + blend_name + "'")

                except IOError:
                    print("Could not create the .blend file '" + blend_name +
                          "'")

                break

            line = line_temp[-32:len(line_temp)]

    except IOError:
        print("Could not open the file '" + exe_name + "'")
        return False

def main():
    if len(sys.argv) > 1:
        args = sys.argv[1:len(sys.argv)]

        # Extract the .blend file(s)
        for arg in args:
            extract_blend(arg)

    else:
        while True:
            executable_url = input("Enter the URL of the executable file, " \
                                   "or ENTER to exit:\n>>> ")

            # Empty line on Unix-like and Windows, respectively
            if len(executable_url) == 0 or executable_url == '\r':
                break

            else:
                # Remove the '\r' character on Windows
                if executable_url[-1] == '\r':
                    executable_url = executable_url[0:-1]

                # Extract the .blend file
                extract_blend(executable_url)

if __name__ == "__main__":
    main()

A extração de arquivos .blend de executáveis não é algo ilegal, pelo fato de a licença especificar que tudo que for embutido no player, está automaticamente sob a GNU GPL. Para mais informações, consulte o artigo Blender na Wikipédia.

Postagens relacionadas

Ligações externas

4 comentários:

Anônimo disse...

estive lendo as pagina ae e ta muito bacana ,adorei algums esclarecimentos ae vlws

Ricvelozo disse...

Obrigado!

Anônimo disse...

boa noite, existem blocos de imagens, tal como no autocad?

Ricvelozo disse...

Não. Mas é possível simular parcialmente a funcionalidade dos blocos usando bibliotecas e grupos, no Blender. Cria-se o objeto (bloco) e o carrega em outro arquivo como biblioteca. Ao modificar o objeto na biblioteca, ele é atualizado em todos os lugares. Os grupos podem ser usados para representar uma entidade.

Postar um comentário