2011-10-15 16 views
10

mojego poprzedniego powiązane pytanie:błąd podczas pisanie po arabsku do obrazu

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

Moim problemem było:

  • Jeśli chcę napisać احمد w obrazie pojawia się jako د م ح ا
  • Well, Naprawiłem i teraz wyjście: ا ح م د

Stosując tę ​​funkcję:

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) ; 

} 

ale nowy problem jest:

ا ح م د

(Oddzielone litery), gdzie powinno być:

احمد

Jak mogę naprawić to?

+0

Niestety, nie rozumiem pytania.Jeśli chcesz, aby 'احمد' pojawił się jako' احمد', dlaczego przeszukujesz tę funkcję? – JJJ

+0

Ponieważ apper jak 'ا ح م د' ma swoje prawo, ale ze spacjami między literami –

+0

SO wydaje się okaleczyć arabski ciąg znaków, linie' $ f' i '$ t' nie mają poprawnej składni w postaci drukowanej, jeśli C & P w normalny edytor wraca do normy. – Victory

Odpowiedz

3

należy użyć bidi konwerter go używać do pisania perski w obrazach

<?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

To działało znacznie lepiej niż powyższe rozwiązanie. Rozwiązanie powyższe z ar-php zniszczyło niektóre znaki, w szczególności cyfry spoza westernu, które zostały utworzone według daty sformatowanej przez system Android. – blackjack75

8

Twój sposób cofania znaki arabskie nie uwzględniających naturę podłączonych glifów. Jednak, jest to poprawna sztuczka w celu rozwiązania problemu z PHP/GD nie obsługuje automatycznie języków RTL takich jak arabski.

Co należy zrobić, to użyć biblioteki ar-php, która wykonuje dokładnie to, co sobie zaplanowałeś.

Upewnij Twój kodowanie plik PHP w Unicode/UTF.
np. > Otwórz Notatnik> Zapisz jako> kodowanie jako UTF-8

enter image description here

wykorzystanie próbki dla arabskiego typografii w PHP przy użyciu 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); 
?> 

Wyjścia:

enter image description here

+0

Jeśli ktoś chce zintegrować to z Laravel, dodaj ścieżkę do pliku ** do pliku ** composer.json **, pod ** "classmap" **. [więcej informacji] (https://laracasts.com/discuss/channels/general-discussion/include-a-non-composer-lib?page=1) – emonik

Powiązane problemy