Oh MyUtils

图片调整大小 - 按尺寸、百分比和社交媒体预设在线调整

按精确尺寸、百分比缩放或社交媒体预设调整图片大小。转换格式、控制质量 — 100%浏览器处理,无需上传服务器。

常见问题

什么是图片调整大小工具?为什么需要它?

图片调整大小工具可以改变图片的像素尺寸。它对于优化网页图片(减少加载时间)、满足社交媒体平台要求(每个平台有特定的图片尺寸)、准备电子邮件模板图片和创建缩略图至关重要。例如,Instagram正方形帖子需要1080x1080像素,YouTube缩略图需要1280x720像素。

如何使用这个图片调整大小工具?

1. 选择调整模式:尺寸(输入精确像素值)、百分比(按比例缩放)或预设(选择社交媒体平台尺寸)。2. 将图片拖放到上传区域。3. 调整设置。4. 可选更改输出格式和质量。5. 点击「全部调整」。6. 单独下载或使用「全部下载(ZIP)」。

我的图片数据安全吗?图片会上传到服务器吗?

您的图片100%安全,绝不会离开浏览器。所有调整大小操作都使用HTML5 Canvas API在客户端执行。没有任何图片数据传输到任何服务器,确保完全隐私。

适应、填充和拉伸模式有什么区别?

适应(Fit)在保持原始宽高比的同时将图片缩放到目标尺寸内。填充(Fill)在保持宽高比的同时完全覆盖目标尺寸,裁剪多余部分。拉伸(Stretch)强制图片匹配精确尺寸,如果宽高比不同可能会变形。大多数情况下推荐使用适应模式。

支持哪些图片格式?

支持三种常见的网络图片格式:PNG(无损,支持透明度)、JPEG(有质量控制的有损压缩,不支持透明度)和WebP(支持有损和无损模式的现代格式,支持透明度)。调整大小时还可以进行格式转换。

社交媒体平台的正确图片尺寸是什么?

工具包含所有主要平台的内置预设:Twitter/X帖子(1200x675)、Instagram动态(1080x1080)、Instagram故事(1080x1920)、Facebook帖子(1200x630)、YouTube缩略图(1280x720)、LinkedIn帖子(1200x627)等。选择「预设」模式并选择目标平台即可一键调整。

调整大小会影响图片质量吗?

缩小通常能很好地保持质量。放大使用双线性插值,可能产生略微模糊的结果(Canvas API的限制)。对于有损格式(JPEG、WebP),质量滑块控制压缩级别。PNG输出始终无损。

支持的最大文件大小和分辨率是多少?

支持每个文件最大50MB,分辨率最大16384 x 16384像素。批量处理可同时调整最多20张图片。移动设备上由于内存限制,最大分辨率可能较低。

代码示例

// Client-side image resizing using Canvas API
async function resizeImage(file, targetWidth, targetHeight, options = {}) {
  const { quality = 0.85, format = null, fitMode = 'fit' } = options;

  return new Promise((resolve, reject) => {
    const img = new Image();
    const url = URL.createObjectURL(file);

    img.onload = () => {
      URL.revokeObjectURL(url);
      const origW = img.naturalWidth;
      const origH = img.naturalHeight;
      let canvasW, canvasH, drawX = 0, drawY = 0, drawW, drawH;

      if (fitMode === 'fit') {
        const scale = Math.min(targetWidth / origW, targetHeight / origH);
        canvasW = Math.round(origW * scale);
        canvasH = Math.round(origH * scale);
        drawX = 0; drawY = 0; drawW = canvasW; drawH = canvasH;
      } else if (fitMode === 'fill') {
        const scale = Math.max(targetWidth / origW, targetHeight / origH);
        drawW = Math.round(origW * scale);
        drawH = Math.round(origH * scale);
        drawX = Math.round((targetWidth - drawW) / 2);
        drawY = Math.round((targetHeight - drawH) / 2);
        canvasW = targetWidth; canvasH = targetHeight;
      } else {
        canvasW = targetWidth; canvasH = targetHeight;
        drawW = targetWidth; drawH = targetHeight;
      }

      const canvas = document.createElement('canvas');
      canvas.width = canvasW; canvas.height = canvasH;
      const ctx = canvas.getContext('2d');

      const outputType = format || file.type || 'image/jpeg';
      if (outputType === 'image/jpeg') {
        ctx.fillStyle = '#ffffff';
        ctx.fillRect(0, 0, canvasW, canvasH);
      }

      ctx.drawImage(img, drawX, drawY, drawW, drawH);

      canvas.toBlob(
        (blob) => {
          if (!blob) { reject(new Error('Resize failed')); return; }
          resolve({
            blob, width: canvasW, height: canvasH,
            originalSize: file.size, resizedSize: blob.size,
          });
        },
        outputType,
        outputType === 'image/png' ? undefined : quality
      );
    };

    img.onerror = () => { URL.revokeObjectURL(url); reject(new Error('Failed to load')); };
    img.src = url;
  });
}

// Usage
const input = document.querySelector('input[type="file"]');
input.addEventListener('change', async (e) => {
  const file = e.target.files[0];
  const result = await resizeImage(file, 800, 600, { quality: 0.9, fitMode: 'fit' });
  console.log(`Resized: ${result.width}x${result.height}, ${result.resizedSize} bytes`);

  const url = URL.createObjectURL(result.blob);
  const a = document.createElement('a');
  a.href = url; a.download = 'resized.jpg'; a.click();
  URL.revokeObjectURL(url);
});

相关工具