2011-10-15 9 views
10

mia precedente domanda relativa:Errore durante scrittura araba per l'immagine

php work with images : write complete word in arabic , ttf font

Il mio problema era:

  • Se voglio scrivere احمد in immagine appare come د م ح ا
  • Beh, L'ho risolto e ora l'output: ا ح م د

Usando questa funzione:

function arab($word){ 

     $w = explode(' ',$word) ; 

     $f = array(array('ا','أ'),'ب','ت','ث','ج','ح','د','ذ','ر','ز','س','ش','ص','ض','ط','ظ','ع','غ','ف','ق','ك','ل','م','ن','ه','و','ى'); 

     $t = array(array('ا_','أ_'),'ب_','ت_','ث_','ج_','ح_','د_','ذ_','ر_','ز_','س_','ش_','ص_','ض_','ط_','ظ_','ع_','غ_','ف_','ق_','ك_','ل_','م_','ن_','ه_','و_','ى_'); 

     $my_arab = '' ; 

     foreach($w as $wo) 
     { 
      $r = array() ; 

      $wo = str_replace($f , $t ,$wo); 

      $ne = explode('_', $wo) ; 

      foreach($ne as $new) { 
       $new = str_replace('_','',$new) ; 
       array_unshift($r , $new); 
      } 

      $my_arab .= ' '.implode('',$r) ; 

     } 

    return trim($my_arab) ; 

} 

Ma il nuovo problema è:

ا ح م د

(lettere separate) dove dovrebbe essere:

احمد

Come posso risolvere Questo?

+0

Mi dispiace, non capisco la domanda.Se vuoi che 'احمد' appaia come' احمد', perché lo instradi attraverso questa funzione? – JJJ

+0

Poiché l'apper come 'ا ح م د' ha il suo diritto ma con spazi tra le lettere –

+0

SO sembra mutilare la stringa araba, le righe' $ f' e '$ t' non sono una sintassi valida come stampata, se si C & P in una editor normale tornano alla normalità. – Victory

risposta

3

è necessario utilizzare convertitore bidi Io lo uso per scrivere persiano nelle immagini

<?php 
#---------------------------------------------------------------------- 
# Persian Image 1 
#---------------------------------------------------------------------- 
# Copyright (c) 2011 Saeed Arab Sheybani 
#---------------------------------------------------------------------- 
# This program is under the terms of the GENERAL PUBLIC LICENSE (GPL) 
# as published by the FREE SOFTWARE FOUNDATION. The GPL is available 
# through the world-wide-web at http://www.gnu.org/copyleft/gpl.html 
#---------------------------------------------------------------------- 
# Authors: Saeed Arab Sheybani <[email protected]> 
# Thanks to TCPDF project @ http://www.tecnick.com/ i use unicode_data.php and bidi.php from this site 
#---------------------------------------------------------------------- 

/** 
* A function to change persian or arabic text from its logical condition to visual 
* 
* @author  Saeed Arab Sheybani <[email protected]> 
* @param  string Main text you want to change it 
* @param  boolean Apply e'raab characters or not? default is true 
* @param  boolean Which encoding? default it "utf8" 
* @param  boolean Do you want to change special characters like "allah" or "lam+alef" or "lam+hamza", default is true 
*/ 
function Persian_image(&$str) 
{ 
    include_once('bidi.php'); 

    $text = explode("\n", $str); 

    $str = array(); 

    foreach($text as $line){ 
     $chars = bidi::utf8Bidi(bidi::UTF8StringToArray($line), 'R'); 
     $line = ''; 
     foreach($chars as $char){ 
      $line .= bidi::unichr($char); 
     } 

     $str[] = $line; 
    } 

    $str = implode("\n", $str); 
} 
+0

Questo ha funzionato molto meglio per me rispetto alla soluzione sopra. La soluzione precedente con ar-php trashed alcuni caratteri, in particolare i numeri non occidentali che sono stati creati da una data formattata dal sistema Android. – blackjack75

8

Il tuo modo di invertire caratteri arabi non significa tener conto della natura dei glifi collegati. Tuttavia, è un trucco valido per risolvere il problema di PHP/GD che non supporta automaticamente le lingue RTL come arabo.

Quello che devi fare è usare la libreria ar-php che fa esattamente quello che volevi.

Assicurati che il tuofile PHP codifica è in unicode/UTF.
ad es. > Aprire il Blocco note> Salva con nome> codifica UTF-8:

enter image description here

utilizzo di esempio per la tipografia araba in PHP utilizzando imagettftext:

<?php 
    // The text to draw 
    require('./I18N/Arabic.php'); 
    $Arabic = new I18N_Arabic('Glyphs'); 
    $font = './DroidNaskh-Bold.ttf'; 
    $text = $Arabic->utf8Glyphs('لغةٌ عربيّة'); 

    // Create the image 
    $im = imagecreatetruecolor(600, 300); 

    // Create some colors 
    $white = imagecolorallocate($im, 255, 255, 255); 
    $grey = imagecolorallocate($im, 128, 128, 128); 
    $black = imagecolorallocate($im, 0, 0, 0); 
    imagefilledrectangle($im, 0, 0, 599, 299, $white); 

    // Add the text 
    imagettftext($im, 50, 0, 90, 90, $black, $font, $text); 

    // Using imagepng() results in clearer text compared with imagejpeg() 
    imagepng($im, "./output_arabic_image.png"); 
    echo 'open: ./output_arabic_image.png'; 
    imagedestroy($im); 
?> 

Uscite:

enter image description here

+0

Nel caso in cui qualcuno volesse integrare questo con Laravel, aggiungi il percorso del file al tuo ** composer.json **, nella sezione ** "classmap" **. [maggiori informazioni] (https://laracasts.com/discuss/channels/general-discussion/include-a-non-composer-lib?page=1) – emonik

Problemi correlati