-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
大きすぎる(16777216ピクセルを超える)画像が処理できない #6
Comments
(Canon のアプリで iPhone に取り込むとなんだか変なファイルが作成されるらしいという噂は聞く) |
サイズがデカすぎるとか? |
サイズのデカさは関係ない気がする |
というかCanonのアプリでiPhoneで取り込んだファイル自体がとりあえず欲しい |
おそらくこのIssue(misskey-dev/misskey#12026) と同じ問題かと思うのですが、iOS SafariのWebインスペクタを確認すると、 また、原因の箇所は 原因は特定しましたが、修正方法が分からず、コメントにて失礼します。 |
Canonの写真に限らず、iPhone15Proで撮影した写真では高確率で真っ黒になります。 |
scaling_operations.tsのscaleImage()にて、OffscreenCanvasの総ピクセル数が167777216を突破しないように上限を設けるようにしたらいかがでしょうか。 内容としては、縦横の比率を維持したまま167777216ピクセルに収まるようにcanvasの縦横サイズを調節するという物です。 function calcLimitSize(size: { width: number, height: number }, maximumPixels: number) {
const { width, height } = size;
const requiredPixels = width * height;
if (requiredPixels <= maximumPixels) {
return size;
}
const aspectRatio = width / height;
const newWidth = Math.sqrt(maximumPixels * aspectRatio);
const newHeight = Math.sqrt(maximumPixels / aspectRatio);
return {
width: Math.floor(newWidth),
height: Math.floor(newHeight),
};
}
export async function scaleImage({ img, config }: {
img: ImageBitmapSource | OffscreenCanvas;
config: BrowserImageResizerConfig;
}) {
if (config.debug) {
console.log('browser-image-resizer: Scale: Started', img);
}
let converting: OffscreenCanvas;
if (img instanceof OffscreenCanvas) {
converting = img;
} else {
const bmp = await createImageBitmap(img);
// 比率を維持したまま
const limitSize = calcLimitSize({ width: bmp.width, height: bmp.height }, 16777216)
converting = new OffscreenCanvas(limitSize.width, limitSize.height);
converting.getContext('2d')?.drawImage(bmp, 0, 0);
}
if (!converting?.getContext('2d')) throw Error('browser-image-resizer: Canvas Context is empty.');
.... |
(safari以外でも問答無用に動いてしまうので、改善する必要あります…) |
この例だと画像がはみ出そう
を
にする必要がある |
何これ?iOS Safariだけ制限が辛い(macOS Safariは大丈夫)な仕様なんか?? |
しかも挙動見てるとなんかエラーハンドリングできないんだろうか? |
なおした |
https://misskey.io/notes/9di5jzpy1b
https://misskey.io/notes/9di6cdvew1
The text was updated successfully, but these errors were encountered: