20

Photoshop によって埋め込まれたパスを使用して画像のアルファ マスクを作成する Javascript コードに取り組んでいます。IMG タグの onload ハンドラは、clip(this) を呼び出します。この関数は、画像のソース ファイルを読み込み、それをスキャンします。セットアップは次のとおりです。

function clip(img) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', img.src, true);
    xhr.responseType = 'arraybuffer';
    xhr.target = img;

    xhr.onload = function(e) {
        var bytes = new Uint8Array(this.response);
        var p = findPhotoshopSegment(bytes);
        if(p) {
            var paths = parse8BIMData(bytes, p);

            /* ... replaces IMG with SVG tag ... */
        }
    };
    xhr.send();
}

http://flaczki.net46.net/JPEG/SVG.htmlでコードの動作を確認できます。

現在、Firefox、Chrome、および Safari でのみ動作します。IE9 では動作しません。ブラウザは SVG をサポートしていますが、Uint8Array はサポートしていません。何らかの回避策はありますか?

4

2 に答える 2

27

私はpdf.jsライブラリで遊んでいるときに同じ問題を抱えていました。私が見つけた解決策は、独自のUint8Arrayを作成することです。以下は必要なコードです。すべてのクレジットはnotmasteryet @github に送られ、完全なコードはhttps://gist.github.com/1057924にあります。

(function() {
  try {
    var a = new Uint8Array(1);
    return; //no need
  } catch(e) { }

  function subarray(start, end) {
    return this.slice(start, end);
  }

  function set_(array, offset) {
    if (arguments.length < 2) offset = 0;
    for (var i = 0, n = array.length; i < n; ++i, ++offset)
      this[offset] = array[i] & 0xFF;
  }

  // we need typed arrays
  function TypedArray(arg1) {
    var result;
    if (typeof arg1 === "number") {
       result = new Array(arg1);
       for (var i = 0; i < arg1; ++i)
         result[i] = 0;
    } else
       result = arg1.slice(0);
    result.subarray = subarray;
    result.buffer = result;
    result.byteLength = result.length;
    result.set = set_;
    if (typeof arg1 === "object" && arg1.buffer)
      result.buffer = arg1.buffer;

    return result;
  }

  window.Uint8Array = TypedArray;
  window.Uint32Array = TypedArray;
  window.Int32Array = TypedArray;
})();
于 2012-08-21T01:57:11.903 に答える
6

より広い範囲の互換性を確保したい場合は、「web」ディレクトリの下の PDF.js ディストリビューションに含まれている compatibility.js ファイルを使用することもできます。Mozilla Githubから PDF.js を取得し、zip アーカイブを解凍して、上記のディレクトリから compatibility.js ファイルを含めます。また、PDF.js ライブラリを IE9 などで動作させます。

于 2013-01-16T10:17:07.983 に答える