2010-12-01 11 views
0


私は実行中の問題をexplaneする前に、私のユースケースで頑張ります。PHP修正イメージのバイト数

私はphonegapフレームワークを使用してモバイルアプリケーションを構築しています。
このアプリケーションでは、ファイル(カメラで作った画像)をアップロードする必要があります。
ほとんどのプラットフォームでは、このイメージをbase64でエンコードされたイメージとして戻すことができます。
私はこれをサーバーに送り返すことができ、それをデコードして保存することができます。 (QRコードのように他の面白いこともしています)。

今、シンビアンでは、私はbase64文字列を返すことができず、私はイメージにURIを取得することしかできません。 xmlhttprequestを使ってイメージデータを取得し、javascriptを使ってbase64にエンコードすることができるので、これは問題ではありません。

この方法は機能しますが、問題が発生します。
Symbianブラウザにバグがあるようです。それは2005年からのWebkitベースのブラウザです(はい、これは古いもので、最新のs60携帯電話でも)。
バグは、(utf-8テーブルではなく)知らないすべての文字を2バイトに変換することです。もし正しく覚えていれば、それは127以上のすべてだった。

私はjavascriptを使ってこのバグを修正しようとしましたが、キャンバスとしてサポートされていないため、btw、canvas、getBinariesなどはサポートされていませんでしたブラウザによって)。

私はPHPでバイトを修正するための回避策を構築しようとします。 これは働いていないけれども、私は、今持っているものです。

function getValidBin($bin, $offset = 0) { 
    $binLength = sizeof($bin); 
    for ($i = $offset; $i<=$binLength; $i++) { 
     if ($i == $binLength) { 
      return false; 
     } 
     if ($bin[$i] < 127) { 

      $binT = $bin[$i] + $bin[$i+1]; 
      $bin2 = $bin; 
      $bin2[$i] = $binT; 
      $bin2[$i+1] = null; 
      if (imagecreatefromstring($bin2) != false) { 
       return $bin2; 
      } else { 
       $bin3 = getValidBin($bin2, $i); 

       if ($bin3 != false) { 
        return $bin3; 
       } 
      } 
     } 
    } 
} 

この関数は、何らかの理由で機能していません。 は、私は次の警告を得る:

Warning: imagecreatefromstring() [function.imagecreatefromstring]: Data is not in a recognized format in /opt/content/erik/omnicol/HTML/WS/services/qrDecoder/QrDecoder.php on line 98

を、私は得る:

Fatal error: Maximum function nesting level of '100' reached, aborting! in /opt/content/erik/omnicol/HTML/WS/services/qrDecoder/QrDecoder.php on line 87

この最後の1はそれが非常に簡単解決するために、私は思いますが、私はi'deはとにかくそれを投稿だと思います。

今、私の質問は次のとおりです。
正しいトラックにいますか?
警告を解決するにはどうすればよいですか?事前に

どうもありがとう、
エリック

P.S.私の英語が悪い場合は申し訳ありません。私はネイティブスピーカーではなく、私はオランダ人です。 http://markmail.org/message/iosbn3rbcgu5k6qt

EDIT: 100の深さの最大のためのソリューションは、私はそれがあるだろうと思っ困難だった
p.s.2は私が話していたバグがこれです。それで助けても素晴らしいでしょう。

+0

元のバイトシーケンスと変更されたバイトシーケンスはどのように見えますか? –

+0

あなたに正しいバイトを与える方法は本当に分かりませんが、私はあなたにbase64を与えることができます: http://www.erikmaas.com/test/bins.html – Erik

+0

Webkit 2005?おそらくバグがあります。 Webkitブラウザをアップグレードしてみてください... – alexy13

答えて

0

この問題の解決策はありませんでした。
私はアプリケーションのJavaScript側にバイトを修正するように切り替えました。

0

なぜそれぞれのバイトごとにイメージを作成しようとしていますか?そしてその再帰は何ですか?あなたは単に文字列を実行して、その2バイトを修正できませんか?このようなもの:

function getValidBin($s) { 
    $new_s = ''; 
    for ($i = 0; $i < strlen($bin) ; $i++) 
    { 
     $char = $s{$i}; 
     if (ord($char) > 127) 
     { 
      $char = chr(ord($char) + ord($s{$i})); 
      $i++; 
     } 
     $new_s .= $char; 
    } 
} 

すでにbase64でデコードされた文字列を入力する必要があります。

は、私はあなたのライン

$binT = $bin[$i] + $bin[$i+1]; 

は「文字コード> 127があれば、一緒にこの次の文字コードを追加して、単一の文字として使用」を意味するようになっていたと仮定し、私は仮定しましたこのアプローチは本当に必要なものです(私たちはあなたのデータを知らないのでわかりません)。

+0

はい、それは私が探していたものでしたが、それらのバイトが1バイトである必要があるかどうかわかりません。 それは、それが多くのチェックを伴う再帰関数であった理由です。 しかし明らかに間違ったバージョンは、適切なバージョンよりも短くなっています(いくつかの奇妙な理由でわかりません)。だから私は今us-asciiを使うことにしました。私にはいくつかの問題がありますが、修正するのが簡単だと思います。 – Erik

関連する問題