http://www.dropzonejs.com/ を使用してドロップゾーンページを実装しました
サイズ変更機能に問題があります。アスペクト比が間違っていると、画像が常にトリミングされます。
私は2つのことを疑問に思っています:
私はcssを調整して2を実装しましたが、ドロップゾーンコードを使用するより良い方法があるかどうか疑問に思っています。
1の例は、誰かが持っている場合に非常に役立ちます。ありがとう、マット。
実際、プレビューは、オプションthumbnailWidth
とthumbnailHeight
の両方を明示的に指定した場合にのみトリミングされるようです。それ以外の場合、サムネイルのサイズを1つだけ指定するか、まったく指定しないと、指定したオプションthumbnailWidth
またはthumbnailHeight
に従って画像全体のサイズが比例して変更されます。
例、1200x800画像ソースの場合:
// Resized preview (400x267)
var dp = new Dropzone(document.getElementById('dp'), {
thumbnailWidth: 400,
thumbnailHeight: null
}
// Resized preview (600x400)
var dp = new Dropzone(document.getElementById('dp'), {
thumbnailWidth: null,
thumbnailHeight: 400,
}
// Croped preview (400x400)
var dp = new Dropzone(document.getElementById('dp'), {
thumbnailWidth: 400,
thumbnailHeight: 400,
}
ただし、ソース画像の比率がわからず、プレビューをサイズ設定されたdivに合わせる必要がある場合は、dropzone.jsのresize
関数を使用してください。 ドキュメント で説明されているように、複数の属性を持つオブジェクトを返す必要があります。サムネイルのサイズに応じてプレビューのサイズを変更する例を次に示します。
var dp = new Dropzone(document.getElementById('myDropzone'), {
// Your dropzone options here...
thumbnailWidth: 400,
thumbnailHeight: 400,
resize: function(file) {
var resizeInfo = {
srcX: 0,
srcY: 0,
trgX: 0,
trgY: 0,
srcWidth: file.width,
srcHeight: file.height,
trgWidth: this.options.thumbnailWidth,
trgHeight: this.options.thumbnailHeight
};
return resizeInfo;
}
});
これにより、ストレッチプレビューが表示されます。ただし、もちろん、ソース画像のサイズ、サイズ変更されたdivのサイズ、またはプレビューを希望どおりに表示するために必要なものに応じて、trgWidth
とtrgHeight
を把握できます。
はい、できます。トリミングされていないサムネイルを取得するには、次の2つのことを行う必要があります。
次のようにdropzonecssをオーバーライドします。
.dropzone .dz-preview .dz-image {width:auto!important;高さ:自動!重要; }
残念ながら、設定で切り抜きなしのオプションを指定する方法はありませんが、dropzone.jsを次のように変更することで、それを実現できました。お役に立てば幸いです。
この変更により、高さが固定されたアスペクト比が維持されます(幅が固定されるように変更できます)。
行117置換:
resizeInfo.trgWidth = _this.options.thumbnailWidth;
これとともに:
resizeInfo.trgWidth = img.width * (_this.options.thumbnailHeight / img.height);
そして1182行目置換:
ctx.drawImage(img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);
これとともに:
ctx.drawImage(img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, img.width, img.height, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);
次のようにオプションを設定できるようです。
{
thumbnailWidth: null,
thumbnailHeight: null
}
また、Dropzoneはデフォルトで画像のサイズを変更します。
拡大縮小されたサムネイルを取得するには、thumbnailWidthまたはthumbnailHeightのいずれかをnullとして設定します。
{
thumbnailWidth: null,
thumbnailHeight: "120"
}
次のCSSを適用します。
.dropzone .dz-preview .dz-image {
width: auto !important;
height: auto !important;
}
.dropzone .dz-preview .dz-image img{
max-width: 100%;
}
レスポンシブウェブサイトの画像の最大幅は、狭い画面で画像を拡大縮小します。
画像のアスペクト比を維持するために、@ Gui-Donの回答を少し変更しました。
thumbnailWidth: 400,
thumbnailHeight: 400,
resize: function(file) {
var thumbNHeight = this.options.thumbnailHeight;
var thumbNWidth = this.options.thumbnailWidth;
var ratio = 1;
if (file.width > file.height) {
ratio = (file.width / file.height);
thumbNHeight = thumbNHeight / ratio;
} else if (file.height > file.width) {
ratio = (file.height / file.width);
thumbNWidth = thumbNWidth / ratio;
}
var resizeInfo = {
srcX: 0,
srcY: 0,
trgX: 0,
trgY: 0,
srcWidth: file.width,
srcHeight: file.height,
trgWidth: thumbNWidth,
trgHeight: thumbNHeight
};
return resizeInfo;
}