Ir para conteúdo
Fórum Script Brasil

Perfect Lion

Membros
  • Total de itens

    340
  • Registro em

  • Última visita

Tudo que Perfect Lion postou

  1. É eu descobri que está errado na strutura.. o comentário do SubHeader não é 14 e sim 13 pois se você for fazer a conta 19-31 Blank; can be used for comments [14] 31 - 19 = 12 12 + "0" = 13 pois como sabemos ele começa contar o 0 como um lista ;) então se colocar 13 ao invez de 14 no comentarios ele funciona... agora só preciso saber como eu vou fazer para recarregar essa img.. pois eu não posso salvar ela ela só tem que permanecer na memoria. pois só será salvo quando o cara solicitar salvar tal img. etals.. Então eu tenho que mostrar a img mais não salvar e depois carregala.. eu tenho que tentar fazer ele carregar direto da memoria.. alguém tem alguma ideia? A eu num estou conseguindo recuperar a Paleta que são os ultimos 768 do arquivo.. pelo que está informando aí na strutura A eu atualizei o loadSFF.class.py la vai: loadSFF.class.py # -*- coding: iso-8859-1 -*- # Essa biblioteca é onde vou tentar criar o manipulador de IMG PCX from PIL import Image # Biblioteca referente a funções e classes para auxiliar a mesma from utils import * # << Inicio class SFF class SFF(struct): """ #Nome: SFF #Desc: Le arquivo de strutura SFF #Author: Erick Leão (Perfect Lion) - erick_leao@yahoo.com.br - MSN: erick_leao@hotmail.com #Site: www.paodemugen.com.br """ Header = struct(); SubHeader = []; msgError = []; Paleta = False; SFFFile = str; TotalLoad = False; def __init__(self,arquivo,modo="r"): """ #Name: INI #Desc: Metodo construtor """ try: self.SFFFile = open(arquivo,modo); except: self.msgError.append("FILE -> Não foi possivel abrir o arquivo"); def header(self): """ #Name: header #Desc: Responsavel por ler e recuperar o Header do arquivo #Param: void #Return: void """ self.Header.signature = self.SFFFile.read(12); # str # assinatura do SFF if self.Header.signature[0:11] == "ElecbyteSpr": self.Header.version = [ calcsize(self.SFFFile.read(1)) # int , calcsize(self.SFFFile.read(1)) # int , calcsize(self.SFFFile.read(1)) # int , calcsize(self.SFFFile.read(1)) # int ]; # Version do sff self.Header.NoGroups = calcsize(self.SFFFile.read(4)); # int Numeros de grupos existentes self.Header.NoImages = calcsize(self.SFFFile.read(4)); # int Numero de imagens existenes self.Header.FirstFileOffset = calcsize(self.SFFFile.read(4)); # int recupera a primeira posiçao em bytes da primeira img self.Header.SizeSubHeader = calcsize(self.SFFFile.read(4)); # int tamanho do subHeader self.Header.PaletteType = calcsize(self.SFFFile.read(1)); # int Tipo de paleta self.Header.BlankSetZero = calcsize(self.SFFFile.read(3)); # int num sei ainda :P self.Header.Comments = self.SFFFile.read(476); # str comentarios else: self.msgError.append("Header -> O header não é um SFF verifique o arquivo;") return def subHeader(self): """ #Name: subHeader #Desc: Responsavel por ler e recuperar o subHeader do arquivo #Param: void #Return: void """ proximo = self.Header.FirstFileOffset; i=0 while i < self.Header.NoImages: # 32 bytes self.SFFFile.seek(proximo); # move o ponteiro até o byte das info da img Next = calcsize(self.SFFFile.read(4)); # 4 bytes recupera o bytes onte se encontra a proxima imagem SubFileLength = calcsize(self.SFFFile.read(4)); # 4 bytes recupera o tamanho do pcx X = calcsize(self.SFFFile.read(2)); # 2 bytes recupera a posiçao X da img Y = calcsize(self.SFFFile.read(2)); # 2 bytes recupera a posiçao Y da img Group = calcsize(self.SFFFile.read(2)); # 2 bytes recupera o grupo a que ela pertence ImgNumber = calcsize(self.SFFFile.read(2)); # 2 bytes numero da img atual Previous = calcsize(self.SFFFile.read(2)); # 2 bytes numro da img anterior Palette = calcsize(self.SFFFile.read(1)); # 1 byte se ela utiliza Paletta Comments = self.SFFFile.read(13); # 13 bytes Comentarios referente a img PCXData = self.SFFFile.read(SubFileLength + (Next - SubFileLength - self.SFFFile.tell())); # recupera os bytes da img self.SubHeader.append( { "Next" : Next #int , "SubFileLength" : SubFileLength #int , "X" : X # int , "Y" : Y # int , "Group" : Group # int , "ImgNumber" : ImgNumber # int , "Previous" : Previous # int , "Palette" : Palette # int , "Comments" : Comments # str , "PCXData" : PCXData # str } ); proximo = Next; # vai para o proxima imagen (byte) if self.TotalLoad != "false" and (i + 1) == self.TotalLoad : break; i += 1; if self.TotalLoad == False and (i + 1) != self.TotalLoad : self.Paleta = calcsize(self.SFFFile.read(Next)); def read(self): """ #Name: read #Desc: Lé o conteúdo do arquivo; #Param: void #Return: void """ if self.SFFFile: self.header(); self.subHeader(); else: self.msgError.append("Read -> O aquivo não foi aberto;") return def debug(self,abilitado=0): """ #Name: debug #Desc: Debuga o sistema caso não retorne nada.. abilitando a mesma informa onde O erro. """ if abilitado: for msg in self.msgError: print msg; # >> Fim class SFF # Inicia a classe chamando o arquivo ele aceita mais 1 paramento # esse outro paramento é o metodo que o arquivo será aberto # o padrão é "r" que é abrir para leitura # mais quando formos grv SFFLoad = SFF("chars/kfm/kfm.sff"); # setá uma quantidade a ser mostrada... isso aqui serve só para a gente # fazer os testes pois ter que ficar fazendo teste e sempre # mostrando todos é ruim em =) #SFFLoad.TotalLoad = 5; # Manda executar e ler o SFF SFFLoad.read(); # Debug opcional quando em 1 mostra os erros que foram encontrado #SFFLoad.debug(1); # SubHeader traz uma lista contendo bibliotecas com os nomes dos campos # Aqui eu fiz com que ele me mostra uma lista do que tenho # Printando na tela o valor deles;) # EX: i = 0; Mostrar = {} Mostrar["inicio"] = 0; Mostrar["fim"] = 0; for x in SFFLoad.SubHeader: if i >= Mostrar["inicio"] and i <= Mostrar["fim"]: print "Posição da próxima imagem: %i" % x["Next"] print "Tamanho..................: %i" % x["SubFileLength"] print "Posição X................: %i" % x["X"] print "Posição Y................: %i" % x["Y"] print "Grupo....................: %i" % x["Group"] print "Número da imagem.........: %i" % x["ImgNumber"] print "Número da imagem anterior: %i" % x["Previous"] print "Paleta...................: %i" % x["Palette"] print "Comentários..............: %s" % x["Comments"] i += 1; im = open("tmp.pcx","w"); im.write(SFFLoad.SubHeader[0]["PCXData"]); im.close();
  2. Eu fiz um teste aqui e tentei abrir o pcx com o PIL e consegui abrir um arquivo normal do PCX com o comando: from PIL import Image im = Image.open("imgem.pcx"); im.show(); E ele me mostro a img na tela.. agora preciso saber como gerar a img com o PIL somente com os dados bytes.. e até agora sem sucesso =/ Eu tentei algo como from PIL import Image imString = open("imagem.pcx","r").read(); im = Image.fromstring("1",(20,20),imString); im.show(); Mais sem exito =/ olha a sintaxe.: Opa acho que sei porque está dando erro na hora que você tenta ler o pcx... anexo tem 1 img o primeiro elemento que você carrega.. esse pcx está funfionando ele é a primeira imagem do grupo 9000 Veja o codigo fonte dele e veja o codigo fonte que está retornando o PCXData mais claro crie um salvar aí.. im = open("imagen.pcx","w"); im.write(SubHeader["PCXData"]); im.close(); depois abre esse arquivo que você acaba de criar e o que está em anexo aqui e veja que há uma diferença pouca no começo pelo - no do anexo tem 4 quadrados e no salvo tem somente 3 .. o que será que estamos fazendo de errado? caso queria eu fiz uma classe para manipular esse sff.. pois depois vou ter que criar um solvar sff =D loadSFF.class.py # -*- coding: iso-8859-1 -*- # Essa biblioteca é onde vou tentar criar o manipulador de IMG PCX from PIL import Image # Biblioteca referente a funções e classes para auxiliar a mesma from utils import * # << Inicio class SFF class SFF(struct): """ #Nome: SFF #Desc: Le arquivo de strutura SFF #Author: Erick Leão (Perfect Lion) - erick_leao@yahoo.com.br - MSN: erick_leao@hotmail.com #Site: www.paodemugen.com.br """ Header = struct(); SubHeader = []; msgError = []; SFFFile = str; TotalLoad = "false"; def __init__(self,arquivo,modo="r"): """ #Name: INI #Desc: Metodo construtor """ try: self.SFFFile = open(arquivo,modo); except: self.msgError.append("FILE -> Não foi possivel abrir o arquivo"); def header(self): """ #Name: header #Desc: Responsavel por ler e recuperar o Header do arquivo #Param: void #Return: void """ self.Header.signature = self.SFFFile.read(12); # str if self.Header.signature[0:11] == "ElecbyteSpr": self.Header.version = [ calcsize(self.SFFFile.read(1)) # int , calcsize(self.SFFFile.read(1)) # int , calcsize(self.SFFFile.read(1)) # int , calcsize(self.SFFFile.read(1)) # int ] self.Header.NoGroups = calcsize(self.SFFFile.read(4)); # int self.Header.NoImages = calcsize(self.SFFFile.read(4)); # int self.Header.FirstFileOffset = calcsize(self.SFFFile.read(4)); # int self.Header.SizeSubHeader = calcsize(self.SFFFile.read(4)); # int self.Header.PaletteType = calcsize(self.SFFFile.read(1)); # int self.Header.BlankSetZero = calcsize(self.SFFFile.read(3)); # int or str? self.Header.Comments = self.SFFFile.read(476); # str else: self.msgError.append("Header -> O header não é um SFF verifique o arquivo;") return def subHeader(self): """ #Name: subHeader #Desc: Responsavel por ler e recuperar o subHeader do arquivo #Param: void #Return: void """ proximo = self.Header.FirstFileOffset; i=0 while i < (self.Header.NoImages - 1): self.SFFFile.seek(proximo); # move o ponteiro até o byte da img Next = calcsize(self.SFFFile.read(4)); SubFileLength = calcsize(self.SFFFile.read(4)); X = calcsize(self.SFFFile.read(2)); Y = calcsize(self.SFFFile.read(2)); Group = calcsize(self.SFFFile.read(2)); ImgNumber = calcsize(self.SFFFile.read(2)); Previous = calcsize(self.SFFFile.read(2)); Palette = calcsize(self.SFFFile.read(1)); Comments = self.SFFFile.read(14); PCXData = self.SFFFile.read(SubFileLength); self.SubHeader.append( { "Next" : Next #int , "SubFileLength" : SubFileLength #int , "X" : X # int , "Y" : Y # int , "Group" : Group # int , "ImgNumber" : ImgNumber # int , "Previous" : Previous # int , "Palette" : Palette # int , "Comments" : Comments # str , "PCXData" : PCXData # str } ); proximo = Next; # vai para o proxima imagen (byte) if self.TotalLoad != "false" and (i + 1) == self.TotalLoad : break; i += 1; def read(self): """ #Name: read #Desc: Lé o conteúdo do arquivo; #Param: void #Return: void """ if self.SFFFile: self.header(); self.subHeader(); else: self.msgError.append("Read -> O aquivo não foi aberto;") return def debug(self,abilitado=0): """ #Name: debug #Desc: Debuga o sistema caso não retorne nada.. abilitando a mesma informa onde O erro. """ if abilitado: for msg in self.msgError: print msg; # >> Fim class SFF # Inicia a classe chamando o arquivo ele aceita mais 1 paramento # esse outro paramento é o metodo que o arquivo será aberto # o padrão é "r" que é abrir para leitura # mais quando formos grv SFFLoad = SFF("chars/kfm/kfm.sff"); # setá uma quantidade a ser mostrada... isso aqui serve só para a gente # fazer os testes pois ter que ficar fazendo teste e sempre # mostrando todos é ruim em =) SFFLoad.TotalLoad = 1; # Manda executar e ler o SFF SFFLoad.read(); # Debug opcional quando em 1 mostra os erros que foram encontrado SFFLoad.debug(1); # SubHeader traz uma lista contendo bibliotecas com os nomes dos campos # Aqui eu fiz com que ele me mostra uma lista do que tenho # Printando na tela o valor deles;) # EX: for x in SFFLoad.SubHeader: print "Posição da próxima imagem: %i" % x["Next"] print "Tamanho..................: %i" % x["SubFileLength"] print "Posição X................: %i" % x["X"] print "Posição Y................: %i" % x["Y"] print "Grupo....................: %i" % x["Group"] print "Número da imagem.........: %i" % x["ImgNumber"] print "Número da imagem anterior: %i" % x["Previous"] print "Paleta...................: %i" % x["Palette"] print "Comentários..............: %s" % x["Comments"] fileSFF = open("tmp.pcx","w"); fileSFF.write(SFFLoad.SubHeader[0]["PCXData"]); fileSFF.close(); #fileSFF = Image.open("tmp.pcx"); #fileSFF.show(); utils.py def calcsize(chunk): old = 0; for x in reversed(chunk): old = (old << 8) | ord(x); return old; class struct: pass;
  3. Eu gosto do ";" pois fica mais visivel para o pessoal que está aprendendo a programa onde termina uma linha de script e tals... pois eu vou ver de deixar esse script que estou montando opensource.. então eu estou comentando todo ele.. =D
  4. Opa... gostei em.. tu é o cara mesmo =DDDD cara só me fala uma coisa.. como funciona esse seu utils aí.. o que ele faz? pois está sem comentarios.. então num entendi legal o que ele faz.... =/ Quanto ao gerar a img pcx acho que com a biblioteca PIL tem como você passar os valores.. mais ainda não sei trabalhar com a bliblioteca... =/ se você souber.. me ajuda aí também hahah =D Vlw cara consegui entender o seu utils.py. eu iria resolver com apenas essa função.. def calcsize(chunk): old = 0; for x in reversed(chunk): old = (old << 8) | ord(x); return old; Ela já faz tudo aquilo que você fez... mais gostei do que você fez pois foi uma forma de se chegar ao resultado seguindo passo a passo. Agora preciso só saber como recuperar a img e tals.. alguém sabe usar a biblioteca PIL aí para me dar um toque?
  5. Feito.. está anexado a esse post.. Bem eu estou no caminho agora preciso de ajuda para poder continuar.... pois daqui para frente num tou conseguindo proceguir... Quanto o subheader creio eu que tenho que dar um loop de 32 bites para recuperar tudo até o final do arquivo.. mais antes preciso entender =/ strutura_sff.zip
  6. Fala galera tudo certo? Bem é o seguinte já faz uns 2 meses que estou aprendendo o python e ainda estou no modo TEXTO e não grafico.. então eu resovil então criar um sistema de edição de personagem para uma engine chamada MUGEN que eu achei uma otima ideia para poder aprender o Python. e está sendo já aprendi muita coisa mais ainda estou no modo texto pois se você num sabe o modo texto não adianta ira para o ambiente grafico certo ? hahaha Bem eu programo em php já faz uns 5 anos e de PHP eu entendo e comecei então a partir para o Python uma linguagem mais robusta e prometedora.. e que gostei muito de sua sintaxe que não deixa de ser muito parecido com o PHP por se basea no C Bem vamos ao que intereça eu já sei abrir arquivos e ler também .. o problema está agora em menipular esse conteudo.. essa ferramenta que eu estou criando para editar personagens do MUGEN exite um arquivo chamado fulano.sff que é o Sprite de img do personagem bem até ai tudo ok. Ai que começa a increnca.. o conteúdo dentro do sff é conteúdos bytes. que pelo criador da engine estipulo uma strutura de como gravar e ler esse arquivo eu tenho a strutura aqui /*--| SFF file structure |--------------------------------------------------*\ Version 1.01 HEADER (512 bytes) ------ Bytes 00-11 "ElecbyteSpr\" signature [12] 12-15 1 verhi, 1 verlo, 1 verlo2, 1 verlo3 [04] 16-19 Number of groups [04] 20-24 Number of images [04] 24-27 File offset where first subfile is located [04] 28-31 Size of subheader in bytes [04] 32 Palette type (1=SPRPALTYPE_SHARED or 0=SPRPALTYPE_INDIV) [01] 33-35 Blank; set to zero [03] 36-511 Blank; can be used for comments [476] SUBFILEHEADER (32 bytes) ------- Bytes 00-03 File offset where next subfile in the "linked list" is [04] located. Null if last subfile 04-07 Subfile length (not including header) [04] Length is 0 if it is a linked sprite 08-09 Image axis X coordinate [02] 10-11 Image axis Y coordinate [02] 12-13 Group number [02] 14-15 Image number (in the group) [02] 16-17 Index of previous copy of sprite (linked sprites only) [02] This is the actual 18 True if palette is same as previous image [01] 19-31 Blank; can be used for comments [14] 32- PCX graphic data. If palette data is available, it is the last 768 bytes. \*--------------------------------------------------------------------------*/ Bem agora essa strutura aí pelo que eu entendi eu irei ler ele byte a byte então iria fazer algo como SFFFile = open("fulano.sff","r"); #criando variaveis HEADER Header = {} # 512 bytes Header["signature"] = SFFFile.read(12); Header["version"] = [SFFFile.read(1),SFFFile.read(1),SFFFile.read(1),SFFFile.read(1)]; # [4] Header["NoGroups"] = SFFFile.read(4); Header["NoImages"] = SFFFile.read(4); Header["FirstFileOffset"] = SFFFile.read(4); Header["SizeSubHeader"] = SFFFile.read(4); Header["PaletteType"] = SFFFile.read(1); Header["BlankSetZero"] = SFFFile.read(3); Header["Comments"] = SFFFile.read(476); Mais ai num sei se estou no caminho certo... num sei como recuperar os dados depois =/ quem poderia me dar uma luz? em anexo está o arquivo kfm.sff strutura_sff.rar
  7. Aee pessoal já achei o meu erro nessa mer...... eu estava utilisando a mesma variavel que incrementa na data... "++" para fazer a pesquisa num sei o que tava pensando em utilisar isso ali.... mais valeu... agora o unico problema é a paginação que ta foda.... preciso de ajuda...
  8. Merda de relatorio porque ta dando esse erro???? olha pessoal...... o meu codigo de busca...
  9. sera que alguém poderia me explicar a logica de fazer a paginação???? pois isso é uma coisa muito foda que até hoje não entendi.... depois que eu entender eu irei fazer um tuto para colocar na seção de tuto do forum..... e também vou colocar essa de relatorios pois deve ter muita gente atras disso e num sabe...
  10. Puts eu sei fazer mais o que sei é muito complicado... pois eu peguei um tuto do phpbrasil e achei complicado usar ele não entendi muito.... eu gostaria de entender a logica da paginação... se eu tentender a logica ai eu mesmo monto.... :S
  11. Nosssa agora veio outrou problema........ tem como eu fazer poaginação?????? pois se o usuario colocar a data 01/05/2000 á 01/09/2000 ai to ferrado pois vai virar mo bagunça a consulta.... como eu faria isso???
  12. Perfect Lion

    Pagina Administrativa

    Olha eu uso esse que eu montei sempre no começo de todas as paginas....
  13. essa parte foi o que eu percebi também ele complicou muito ai colocou muito codigo que poderia não ter...... ex. vou mostrar a mesma coisa que ele fez mais resumido...
  14. p**** é isso ai mesmo eu nem pensei em usar o for que mancada minha.... depois eu crio um tuto sobre esse tipo de relatorio deve ter uma rapa de gente que num sabe.....
  15. Perfect Lion

    Array

    Ai utilisa essa função ai...... eu acho que pode te ajudar pacas.... pois ele so mostra a array que não são repatida ai é so você saber usar ok.. "array_diff" http://br.php.net/manual/pt_BR/function.array-diff.php Fuiz
  16. mais ai isso eu sei fazer o problema é mostrar assim.... bem eu quero mostrar: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx nome xxxxxxxx 01/05 xxxx 02/05 xxxx 03/05 xxxx 04/05xxxx erick xxxxxxxxx 20 xxxxxxxx 2 xxxxxxx 10 xxxxxxx 1 xxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx a onde aparece os numeros são as quantidades nesses dias sacou... então eu tenho que fazer no php um relatorio que essas datas aparecam como se foçe.. quero de 01/05/2005 à 04/05/2005 e que apareça as data como está ai no exemplo que eu fiz sacou.;... pois o que você fez eu já fiz mais não é o que meu chefe quer ele quer que eu mostre as quantidades nos dias que eu puxar sacou então tenho que mostrar os dias entre essas datas que ele vai determinar....... E eu não estou achando a logica para poder fazer isso..... eu só preciso da logica programar eu vou saber caso eu não saiba seja algo que eu nunca vi pois nunca mexi com relatorio em php ai ta foda... Se vocês me ajudarem ficarei muito grato... valeu;.....
  17. Ola pessoal eu não estou conseguinda fazer um relatorio da segunte forma no banco de dados eu tenho o campo de data e o campo nome bem agora eu queria saber como eu faço isso... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxxxxxxxxxxxxxxxxx xxxxnomexxxxxxxxxxxxdataxxxxxxxxxxxquantidadexxxxxxxxxx Jose -------------------- 12/05/2005 -------- 5 ------------------------ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx virão ???? bem é o seguinte esse nome é anuncio onde tera um db com os anuncios onde a empresa fez contrato.... e eles querem que eu faça um relatorio que quando eles adicionar uma data 12/05/2005 à 16/05/2005 venha todas as datas e a quantidades de ligações teve em cada data como eu faria isso????? Ta muito foda e preciso da logica pois programar eu sei.. so a logica que ta foda........ valeu.....
  18. Aeee cara erra o comando "between" eu queria lembrar desse comando valeu
  19. Ola pessoal eu gostaria de saber qual é o comando no mysql que faz consulta entre datas??? ex: quero que ele puxe registros de 2005-01-02 até 2005-01-10 como eu faço eu já quebrei a cabeça aqui e não consegui então tive que vim pedi ajuda... valeu...
  20. Perfect Lion

    Phpmyadmin.....

    Eu já instalei e reinstalei já fiz de tudo e ainda da esse erro... eu acho que deve ser alguma condg. no php.ini mais num sei o q.... :S
  21. Perfect Lion

    Data

    Ta ai.... simples e objetivo :>)
  22. Perfect Lion

    Phpmyadmin.....

    O e agora quem poderá me ajudar???? PLEEEEEESSSSEEEEEE....
  23. coloca o codigo do php que você está fazendo a conex.... ok você deve ter feito alguma coisa errado....
  24. Perfect Lion

    Php.ini

    não é erro não cara deixa o register_globals = On e localise a linha error_reporting veja se esta igual a isso... error_reporting = E_ALL se tiver coloque isso error_reporting = E_ALL & ~E_NOTICE ok comigo também tava dendo esse erro....foi quando eu arrumei isso ai.... lembre ele pode já está assim mais tem ";" na frente ai não funciona se tiver 2 um error_reporting = E_ALL e o outro error_reporting = E_ALL & ~E_NOTICE um deles tem ";" na frente agora localise qual deles esta com o ";" na frente ok tenta ai...
  25. Perfect Lion

    Phpmyadmin.....

    fala pessoal eu não estou conseguindo arrumar esse erro no "phpmyadmin" ele funciona beleza mais da alguns erro por causa dessa info.... " A extensão mbstring do PHP não foi encontrada e você parece estar usando conjuntos de caracteres multibyte. Sem a extensão mbstring o phpMyAdmin não será capaz de dividir as strings corretamente isso pode causar resultados inesperados. " alguém sabe o que é isso o que tenho que fazer?????
×
×
  • Criar Novo...