私は現在、クライアント用の画像トリミング ツールを作成しています。フロント エンドでは、ユーザーが満足するまで画像をアップロードして画像を拡大/縮小し、拡大した画像をパンできます。
これはすべて正常に機能しています。この画像をトリミングする必要があると複雑になり始めます。ツールは css 変換を使用してズームインおよびズームアウトし、これを PHP スクリプトに投稿するとパンを処理します。次のような配列を取得します。
(
[0] => 0.4095092758326518
[1] => 0
[2] => 0
[3] => 0.4095092758326518
[4] => -1257.469970703125
[5] => -441.6499938964844
)
[0] は縮尺係数で、[4] と [5] は x、y 位置であることがわかりました。正しい位置を取得するために、x と y の位置をキー 0 の縮尺係数で割りました。
次に、(たとえば) 329px x 237px にトリミングするビューポートの幅と高さを取得する必要があります。これは、0.277 の倍率で縮小されます (最終出力は、これに合わせて拡大する必要があります)。
私は WideImage php ライブラリを使用していますが、imageMagick にもアクセスできます。
最終的な x、y、および幅と高さの値を計算するコードは次のようになります。
$width = $vport['w']/$scale;
$height = $vport['h']/$scale;
$posY = (abs($matrix[5]))/$matrix[0];
$posX = (abs($matrix[4]))/$matrix[0];
$matrix は CSS 変換配列で、$scale は = 0.277 です。
これは近くで機能していないように見えますが、特定のズームレベルでは機能しません。何が悪いのか、何が問題なのかがはっきりしないかもしれませんが、正直なところ、私は自分自身を知りません. 誰かがこのようなものを構築した場合、または私がどこで間違っている可能性があるかについてアドバイスがあれば、それは素晴らしいことです.
トム:)