Ejemplo n.º 1
0
def ajusta_imagem(dimensao_x,dimensao_y,imagem):
    
    """Ajustes a componentes RGB na imagem
    Argumentos: Dimensão X, dimensão Y, lista com a imagem
    Devolve: Indicação de actualização, dimensão X, dimensão Y, lista com a imagem"""
    
    componente = menu_ops.afixa_menu(defines.menu_ajustes)
    
    if (componente != defines.AJU_FIM):
        
        valor_ajuste = menu_ops.get_ajuste()
        
        for i in range(len(imagem)):
            if (componente == defines.AJU_RED):
                imagem[i][0] = valor_ajuste
            elif (componente == defines.AJU_GREEN):
                imagem[i][1] = valor_ajuste
            elif (componente == defines.AJU_BLUE):
                imagem[i][2] = valor_ajuste
                
        return defines.ACTUALIZA,dimensao_x,dimensao_y,imagem
    
    else:
            
        return defines.NAO_ACTUALIZA,dimensao_x,dimensao_y,imagem
Ejemplo n.º 2
0
def flip_imagem(dimensao_x,dimensao_y,imagem):
    
    """Flip horizontal ou vertical da imagem activa em memoria
    Argumentos: Dimensão X, dimensão Y, lista com a imagem
    Devolve: Indicação de actualização, dimensão X, dimensão Y, lista com a imagem"""
    
    flip = menu_ops.afixa_menu(defines.menu_flip)
    
    if (flip != defines.FLIP_FIM):
    
        if (flip == defines.FLIP_HOR):
            
            # Flip horizontal da imagem
            for y in range(dimensao_y):
                for x in range(dimensao_x/2):
                    imagem[y*dimensao_x+x],imagem[y*dimensao_x+dimensao_x-x-1] = imagem[y*dimensao_x+dimensao_x-x-1],imagem[y*dimensao_x+x]
        
        elif (flip == defines.FLIP_VER):
            
            # Flip vertical da imagem
            for x in range(dimensao_x):
                for y in range(dimensao_y/2):
                    imagem[y*dimensao_x+x],imagem[(dimensao_y-y-1)*dimensao_x+x] = imagem[(dimensao_y-y-1)*dimensao_x+x],imagem[y*dimensao_x+x]
       
        return defines.ACTUALIZA,dimensao_x,dimensao_y,imagem
    
    else:
        
        return defines.NAO_ACTUALIZA,dimensao_x,dimensao_y,imagem
Ejemplo n.º 3
0
def roda_imagem(dimensao_x,dimensao_y,imagem):
    
    """Roda a imagem activa em memoria
    Argumentos: Dimensão X, dimensão Y, lista com a imagem
    Devolve: Indicação de actualização, dimensão X, dimensão Y, lista com a imagem"""
    
    rotacao = menu_ops.afixa_menu(defines.menu_rotacao)
    
    if (rotacao != defines.ROT_FIM):
    
        if (rotacao == defines.ROT_90):
            
            imagem2=[]
     
            # Rotação de 90 graus clockwise
            for x in range(dimensao_x):
                for y in range(dimensao_y):
                    imagem2.append(imagem[dimensao_x*(dimensao_y-(y+1))+x])
            dimensao_x,dimensao_y=dimensao_y,dimensao_x
    
        elif (rotacao == defines.ROT_180):
            
            imagem2=[]
        
            # Rotação de 180 graus clockwise
            for y in range(dimensao_y-1,-1,-1):
                for x in range(dimensao_x-1,-1,-1):
                    imagem2.append(imagem[dimensao_x*y+x])
                
        return defines.ACTUALIZA,dimensao_x,dimensao_y,imagem2

    else:
        
        return defines.NAO_ACTUALIZA,dimensao_x,dimensao_y,imagem
Ejemplo n.º 4
0
def cria_moldura(dimensao_x,dimensao_y,imagem):
    
    """Cria moldura em imagem activa
    Argumentos: Dimensão X, dimensão Y, lista com a imagem
    Devolve: Indicação de actualização, dimensão X, dimensão Y, lista com a imagem"""
    
    #Pede ao utilizador o tamanho da moldura preta a introduzir na imagem
    tam_moldura=menu_ops.afixa_menu(defines.menu_moldura)
    
    if (tam_moldura != defines.MOD_FIM):
        
        tam_moldura *= 5
    
        # Acrescenta moldura horizontal na parte de cima da imagem
        for y in range (tam_moldura):
            for x in range (dimensao_x+2*tam_moldura):
                imagem.insert(0,[0,0,0])
            
        # Acrescenta moldura vertical nos lados esquerdo e direito da imagem
        for y in range (dimensao_y):
            start=((dimensao_x+2*tam_moldura)*tam_moldura)+(y*(dimensao_x+2*tam_moldura))
            for i in range (tam_moldura):
                imagem.insert(start+i,[0,0,0])
            start += (tam_moldura+dimensao_x)
            for i in range (tam_moldura):
                imagem.insert(start+i,[0,0,0])
            
        # Acrescenta moldura horizontal na parte de baixo da imagem
        for y in range (tam_moldura):
            for x in range (dimensao_x+2*tam_moldura):
                imagem.insert(-1,[0,0,0])
    
        dimensao_x += 2*tam_moldura
        dimensao_y += 2*tam_moldura
    
        return defines.ACTUALIZA,dimensao_x,dimensao_y,imagem
    
    else:
        
        return defines.NAO_ACTUALIZA,dimensao_x,dimensao_y,imagem
Ejemplo n.º 5
0
def main():
    
    # Dimensao da imagem activa1
    dimensao_x = 0
    dimensao_y = 0
    
    # Valores RGB dos pixeis que constituem a imagem
    imagem = None
    
    """ Afixa menu e processa opccao selecionada """
    
    termina = 0
    actualiza_imagem = 0
    
    while (not termina):
            
        if (actualiza_imagem):

            # Apresenta imagem actualizada
            image_ops.output_imagem(dimensao_x,dimensao_y,imagem)
            actualiza_imagem = 0
            
        # Apresenta menu principal e obtem opcao
        opcao=menu_ops.afixa_menu(defines.menu_principal)
        
        if (opcao == defines.MAIN_FIM):
            # Termina execucao do programa
            termina = 1
            
        elif ((opcao != defines.MAIN_CARREGA_FICH) and (not imagem)):
            # Ainda nao existe imagem carregada em memoria
            print ("Nao existe imagem carregada")
            continue
            
        else:
            # Executa operacao correspondente 'a opccao do utilizador
            actualiza_imagem,dimensao_x,dimensao_y,imagem = defines.accoes_menu_principal[opcao](dimensao_x,dimensao_y,imagem)
def main():

    # Dimensao da imagem activa1
    dimensao_x = 0
    dimensao_y = 0

    # Valores RGB dos pixeis que constituem a imagem
    imagem = None
    """ Afixa menu e processa opccao selecionada """

    termina = 0
    actualiza_imagem = 0

    while (not termina):

        if (actualiza_imagem):

            # Apresenta imagem actualizada
            image_ops.output_imagem(dimensao_x, dimensao_y, imagem)
            actualiza_imagem = 0

        # Apresenta menu principal e obtem opcao
        opcao = menu_ops.afixa_menu(defines.menu_principal)

        if (opcao == defines.MAIN_FIM):
            # Termina execucao do programa
            termina = 1

        elif ((opcao != defines.MAIN_CARREGA_FICH) and (not imagem)):
            # Ainda nao existe imagem carregada em memoria
            print("Nao existe imagem carregada")
            continue

        else:
            # Executa operacao correspondente 'a opccao do utilizador
            actualiza_imagem, dimensao_x, dimensao_y, imagem = defines.accoes_menu_principal[
                opcao](dimensao_x, dimensao_y, imagem)
Ejemplo n.º 7
0
def oculta_mensagem(dimensao_x,dimensao_y,imagem):
    
    """Oculta mensagem em ficheiro de imagem
    Argumentos: Dimensão X, dimensão Y, lista com a imagem
    Devolve: Indicação de actualização, dimensão X, dimensão Y, lista com a imagem"""
    
    operacao = menu_ops.afixa_menu(defines.menu_ocultar)
    
    if ( operacao != defines.OCU_FIM):
        
        if ( operacao == defines.OCU_ESC):
            
            # Obtem a mensagem a ocultar na imagem
            mensagem = menu_ops.get_mensagem(imagem)
            mensagem += '\n'
        
            indice_imagem = 0
            indice_rgb = 0
            
            # Percorre todos os caracteres da mensagem a ocultar
            for i in range( len(mensagem) ): 
                # Para cada um dos 8 bits de cada caracter
                for j in range( 8 ):
                    # Obtem o bit correspondente
                    novo_bit = (ord(mensagem[i])>>j) & 1
                    # Armazena o bit no bit menos significativo da componente de cor
                    novo_valor = imagem[indice_imagem][indice_rgb]
                    if (novo_bit == 1):
                        novo_valor = novo_valor | novo_bit
                    else:
                        novo_valor = novo_valor & 254
                    imagem[indice_imagem][indice_rgb] = novo_valor
                    
                    # Avanca indices
                    indice_rgb += 1
                    if ( indice_rgb == 3 ):
                        indice_rgb = 0
                        indice_imagem += 1

        
                        
            return defines.ACTUALIZA,dimensao_x,dimensao_y,imagem
        
                    
        elif ( operacao == defines.OCU_LER):

            # Obtem mensagem oculta na imagem activa em memoria
            indice_caracter = 0
            novo_caracter = 0
            indice_imagem = 0
            termina = 0
            mensagem = ""
            indice_sai = 0
    
            
            # Percorre todos os valores rgb da imagem, ate' encontrar o newline
            while ( (not termina) and (indice_imagem<len(imagem)) and (indice_imagem<defines.MAX_MSG) ):
                
                # Para cada um dos 3 componentes de cor
                for j in range( 3 ):
                    
                    # Obtem o bit armazenado na componente de cor
                    novo_bit = ( imagem[indice_imagem][j] & 1 )
                    
                    # Armazena o bit no novo caracter
                    novo_caracter = ( novo_caracter | (novo_bit<<indice_caracter) )
                    # Avanca indices
                    indice_caracter += 1
                    
                    if ( indice_caracter == 8 ):
                        indice_caracter = 0
                        mensagem = mensagem + chr(novo_caracter)
                        if ( novo_caracter == ord('\n')):
                            termina = 1
                        novo_caracter = 0
                            
                indice_imagem += 1

                
            if (termina):
                print "A mensagem oculta na imagem e' a seguinte: ", mensagem
            else:
                print "A imagem não tem mensagem armazenada"
                
            return defines.NAO_ACTUALIZA,dimensao_x,dimensao_y,imagem

    else:
        
        return defines.NAO_ACTUALIZA,dimensao_x,dimensao_y,imagem
Ejemplo n.º 8
0
def encripta_imagem(dimensao_x,dimensao_y,imagem):
    
    """Encripta imagem em ficheiro
    Argumentos: Dimensão X, dimensão Y, lista com a imagem
    Devolve: Indicação de actualização, dimensão X, dimensão Y, lista com a imagem"""
    
    operacao = menu_ops.afixa_menu(defines.menu_encriptacao)
    
    if (operacao != defines.ENC_FIM):
        
        # Obtem password a utilizar como semente na geracao da cifra
        password = menu_ops.get_password()
        
        # Calcula valor para a semente
        seed = 0
        for i in range( len(password) ):
            seed += ord(password[i])
        
        
        # Gera sequencia aleatoria a utilizar como password
        password = []
        
        repetidos=0

        # Gera sequencia de dimensao_x numeros unicos, a utilizar como password
        random.seed(seed)
        
        for i in range (dimensao_x):
            novo = 0
            while ( not novo ):
                novo_numero=random.randint(1,dimensao_x)
                if ( novo_numero not in password ):
                    novo = 1
                    password.append(novo_numero)
                                        
        # Lista de imagem auxiliar
        imagem2 = []
        for i in range( dimensao_x * dimensao_y ):
            imagem2.append([0,0,0])
        
        if ( operacao == defines.ENC_ENC ):
            
            # Encripta imagem activa em memória, trocando a ordem 'as colunas
            # de acordo com a password gerada anteriormente
                        
            for i in range ( dimensao_x ):
                
                # Copia para a nova imagem a coluna cuja posicao e' dada pelo numero armazenado na password
                for j in range (dimensao_y ):
                    imagem2.pop(j*dimensao_x+i)
                    imagem2.insert(j*dimensao_x+i,imagem[j*dimensao_x+password[i]-1])

                                   
        else:
            
            # Percorre password de modo a reconstruir imagem original
            for i in range ( dimensao_x ):
                
                for j in range ( dimensao_y) :
                    imagem2.pop(password[i]-1+j*dimensao_x)
                    imagem2.insert(password[i]-1+j*dimensao_x,imagem[i+j*dimensao_x])
    
        
        return defines.ACTUALIZA,dimensao_x,dimensao_y,imagem2
    
    else:
        
        return defines.NAO_ACTUALIZA,dimensao_x,dimensao_y,imagem