Boa noite Vinícius!
Sobre as funções: A primeira função chamada, a função open()
, cria um objeto do tipo File
. Essa função, além de criar um objeto do tipo File
, retorna um endereço de memória. Por isso foi armazenada em uma variável. Nesse caso, a variável foi chamada de logo
Ou seja, essa variável armazena um endereço de memória, e é um objeto do tipo File
Essa função recebeu o primeiro parâmetro, que é o nome do arquivo a ser aberto, e o segundo é opcional, que é o modo de como o arquivo vai ser aberto. Por se tratar de uma imagem, é usado o modo rb
(read binary)
Agora, devido a variável logo
ser um objeto do tipo File
, temos agora acesso a todos os métodos pertencentes a esse objeto. Sendo um deles, o método read()
Depois de ter aberto a imagem, é necessário ler os dados dessa imagem, por isso a função read()
, que retorna uma string contendo o que foi lido. Entretanto, como o modo em que abrimos o arquivo foi em binário, o retorno que teremos, será em bytes. Se você for printar o conteúdo da variável, dessa forma print(data)
, verá um monte de valores estranhos. Esses valores são os bytes que compõem a imagem.
Por fim, após termos aberto e lidos os dados (nesse caso, nossa imagem), fechamos o arquivo, para liberar a memória que foi alocada para realizar essas operações
Em logo2 = open('python-logo2.png', 'wb')
agora estamos criando um novo objeto, também do tipo File
, com o nome de logo2
, além de chamarmos essa imagem de python-logo2.png
. Esse objeto está em modo wb
, ou seja, irá escrever em modo binário. Esse modo irá sobrescrever tudo o que tem no arquivo, e substituir pelo que mandarmos colocar lá dentro desse arquivo. Nesse caso, se copiarmos os bytes da primeira imagem, e colarmos em um outro arquivo, teríamos como resultado, a mesma imagem. Esse é objetivo da seguinte linha: logo2.write(data)
. Ou seja, essa linha pega todos os bytes que formam a primeira imagem e cola em um novo arquivo. Logo, temos uma cópia.
Espero ter ajudado!
Abraços,
Matheus