A função GD imagettftext() do PHP deve prestar atenção à codificação de caracteres padrão
Autor:Eve Cole
Data da Última Atualização:2009-06-07 15:15:31
Estou desenvolvendo uma pequena função atualmente, que é semelhante a uma assinatura personalizada de fórum. Ela gera automaticamente uma imagem com texto com base nas informações dos membros. A junção de imagens pode ser feita usando funções como imagecopy() e imagecopyresampled(). Porém, quando se trata de desenhar texto, encontro um problema. O modelo de texto é salvo em um arquivo de texto. O programa primeiro lê o arquivo e substitui as variáveis nele contidas por dados e, em seguida, usa a função imagettftext() para desenhá-lo na imagem. Infelizmente, a imagem desenhada está distorcida @_@. ...Então procurei por problemas relacionados no Google e descobri que a maioria das pessoas estava dizendo que a string passada na função imagettftext() precisa ser codificada em UTF-8, e o manual oficial do PHP também afirma claramente "string codificada em UTF-8 ." Pode ser passado diretamente", mas o problema é que a codificação do arquivo de modelo é originalmente UTF-8, o que é um pouco confuso. Em desespero, usei o EmEditor para abrir o arquivo de modelo original, tentei convertê-lo em codificações diferentes e comparei-o com o código ilegível gerado pelo GD. Descobri que, quando converti para a codificação EUC-JP, ele realmente correspondia ao código ilegível. saída por GD... ou seja, a codificação padrão de GD no servidor aqui é EUC-JP, e essa é uma codificação japonesa. Pesquisei nas configurações do php.ini e não encontrei nenhuma opção relevante, então surgiu outra pergunta: onde está definida essa codificação padrão? Foi o irmão de Si Wen, Niu, quem descobriu que havia um parâmetro "--enable-gd-jis-conv" nos parâmetros de compilação do PHP que era muito suspeito. O Google descobriu que muitos problemas distorcidos estavam relacionados a esse parâmetro de compilação... Oficial. descrição do parâmetro É "GD: Habilitar suporte a fontes japonesas mapeadas em JIS.", o que significa que GD suporta fontes codificadas em japonês (droga, por que não há opção de compilação para suportar fontes codificadas em chinês... O PHP também discrimina nacionalidade = =b), para ser franco, habilite-a Se esta opção estiver habilitada, GD mapeará as partes maiores que 127 na biblioteca de fontes TTF (ou seja, as partes que não pertencem à biblioteca de fontes latinas padrão) de acordo na ordem do JIS japonês e, então, ficará naturalmente distorcido quando usado para mapear fontes chinesas. Sem mais delongas, remova esta opção e recompile, e o problema estará resolvido. Depois de remover esta opção, a codificação padrão de imagettftext() se torna UTF-8 e o chinês pode ser exibido normalmente ~