Eventualmente nos deparamos com situações em que precisamos, a partir de um site, aplicativo ou similar, enviar alguma imagem para um servidor. Obviamente, existe a possibilidade do upload. Contudo, existe uma outra opção bastante confortável de tratar (em minha opinião, claro), as imagens base64.
Para quem não sabe, imagens base64 são, à grosso modo, a representação de uma imagem em texto (que tem um tamanho considerável, diga-se de passagem). O grande problema está em salvar estas imagens em banco de dados. Dado seu volume, elas tendem a ocupar muito espaço. Desta forma, uma solução encontrada por nós aqui na IWWA foi a de transformar, em lado servidor, este base64 em um arquivo de imagem e retornar durante as requisições a URL relativa ao arquivo.
Através de pesquisas, alcançamos o seguinte código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public static function base64_to_image($b64, $path) { $output = realpath(dirname('../')) . $path; list($type, $data) = explode(';', $b64); list(, $data) = explode(',', $b64); $data = base64_decode($data); file_put_contents($output, $data); return [ 'success' => file_exists($output), 'paths' => [ 'relative' => $path, 'absolute' => $output ] ]; } |
Basicamente, este código faz:
- Captura o caminho real do diretório de trabalho e concatena ao $path desejado (por exemplo, /avatar/user.jpg).
- Separa os headers dos dados do base 64;
- Decodifica o base64;
- Adiciona conteúdo decodificado no arquivo;
- Retorna objeto que determina se foi criado com sucesso (ou seja, se o arquivo existe) e seus caminhos.
Convém ressaltar que testamos este código com imagens jpg e png.