{"id":12119,"date":"2025-12-05T16:09:21","date_gmt":"2025-12-05T07:09:21","guid":{"rendered":"https:\/\/rakkoserver.com\/plus\/?p=12119"},"modified":"2026-01-30T10:41:14","modified_gmt":"2026-01-30T01:41:14","slug":"tool-webp-converter","status":"publish","type":"post","link":"https:\/\/rakkoserver.com\/plus\/tool-webp-converter\/","title":{"rendered":"JPEG\/PNG\u21d4WebP\u5909\u63db\u30c4\u30fc\u30eb"},"content":{"rendered":"\n<div id=\"imgConv-container\" style=\"width: 100%; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: #333;\">\n  <div id=\"imgConv-input-section\">\n    <div style=\"background: #f8f9fa; padding: 12px 16px; border-radius: 4px; margin-bottom: 20px; display: flex; align-items: center; gap: 10px;\">\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#28a745\" stroke-width=\"2\" aria-hidden=\"true\">\n        <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" \/>\n        <path d=\"M9 12l2 2 4-4\" \/>\n      <\/svg>\n      <span style=\"font-size: 14px; color: #555;\">\u5b89\u5fc3\u8a2d\u8a08:\u753b\u50cf\u306f\u304a\u5ba2\u69d8\u306e\u7aef\u672b\u5185\u3067\u5909\u63db\u3055\u308c\u3001\u30b5\u30fc\u30d0\u30fc\u306b\u306f\u9001\u4fe1\u3055\u308c\u307e\u305b\u3093<\/span>\n    <\/div>\n\n    <div id=\"imgConv-upload-area\" role=\"button\" tabindex=\"0\" aria-label=\"\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\" style=\"border: 2px dashed #ccc; border-radius: 8px; padding: 40px 20px; text-align: center; background: #fafafa; cursor: pointer; transition: all 0.3s; margin-bottom: 20px; position: relative;\">\n      <div id=\"imgConv-upload-initial\">\n        <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#999\" stroke-width=\"2\" style=\"margin: 0 auto 12px;\" aria-hidden=\"true\">\n          <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" \/>\n          <polyline points=\"17 8 12 3 7 8\" \/>\n          <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" \/>\n        <\/svg>\n        <p style=\"margin: 0 0 8px; font-size: 16px; font-weight: 600; color: #333;\">\u753b\u50cf\u3092\u30c9\u30e9\u30c3\u30b0&amp;\u30c9\u30ed\u30c3\u30d7<\/p>\n        <p style=\"margin: 0 0 12px; font-size: 14px; color: #666;\">\u307e\u305f\u306f\u30af\u30ea\u30c3\u30af\u3057\u3066\u9078\u629e<\/p>\n        <p style=\"margin: 0; font-size: 12px; color: #999;\">\u5bfe\u5fdc\u5f62\u5f0f: JPG, PNG, GIF, WEBP(\u6700\u592730\u679a)<\/p>\n      <\/div>\n      \n      <div id=\"imgConv-upload-selected\" style=\"display: none;\">\n        <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#28a745\" stroke-width=\"2\" style=\"margin: 0 auto 12px;\" aria-hidden=\"true\">\n          <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" \/>\n          <polyline points=\"22 4 12 14.01 9 11.01\" \/>\n        <\/svg>\n        <p style=\"margin: 0 0 8px; font-size: 18px; font-weight: 700; color: #28a745;\"><span id=\"imgConv-file-count\">0<\/span>\u679a\u9078\u629e\u6e08<\/p>\n        <p style=\"margin: 0 0 12px; font-size: 14px; color: #666;\" id=\"imgConv-file-names\"><\/p>\n        <p style=\"margin: 0; font-size: 13px; color: #999;\">\u30af\u30ea\u30c3\u30af\u3067\u3055\u3089\u306b\u8ffd\u52a0(\u6700\u592730\u679a)<\/p>\n      <\/div>\n      \n      <input type=\"file\" id=\"imgConv-file-input\" accept=\"image\/jpeg,image\/png,image\/gif,image\/webp\" multiple style=\"display: none;\" aria-label=\"\u30d5\u30a1\u30a4\u30eb\u9078\u629e\">\n    <\/div>\n\n    <div style=\"margin-bottom: 20px; background: #f0f8ff; padding: 20px; border-radius: 8px; border: 1px solid #cce5ff;\">\n      <label for=\"imgConv-format-select\" style=\"display: block; margin-bottom: 10px; font-size: 16px; font-weight: 700; color: #13284B;\">\u5909\u63db\u5f8c\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8<\/label>\n      <div style=\"display: flex; gap: 12px; align-items: center; flex-wrap: wrap;\">\n        <select id=\"imgConv-format-select\" style=\"flex: 1; padding: 12px; border: 1px solid #ddd; border-radius: 4px; font-size: 16px; background: white; min-width: 200px; cursor: pointer;\">\n          <option value=\"image\/webp\" selected>WebP \u306b\u5909\u63db (\u63a8\u5968\u30fb\u8efd\u91cf)<\/option>\n          <option value=\"image\/jpeg\">JPEG \u306b\u5909\u63db<\/option>\n          <option value=\"image\/png\">PNG \u306b\u5909\u63db<\/option>\n        <\/select>\n        <p style=\"margin: 0; font-size: 13px; color: #666; flex: 1; min-width: 200px;\">\n          \u203bJPEG\u5909\u63db\u6642\u306f\u80cc\u666f\u8272\u304c\u767d\u306b\u306a\u308a\u307e\u3059\u3002<br>\u203b\u753b\u8cea\u306f\u81ea\u52d5\u3067\u6700\u9069\u5316(90%)\u3055\u308c\u307e\u3059\u3002\n        <\/p>\n      <\/div>\n    <\/div>\n\n    <button id=\"imgConv-process-btn\" disabled aria-label=\"\u5909\u63db\u3092\u958b\u59cb\" style=\"width: 100%; padding: 16px; background: #ccc; color: white; border: none; border-radius: 6px; font-size: 16px; font-weight: 600; cursor: not-allowed; margin-bottom: 20px; height: 48px; transition: background 0.3s;\">\n      \u753b\u50cf\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\n    <\/button>\n\n    <div id=\"imgConv-progress\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-valuenow=\"0\" style=\"display: none; margin-bottom: 20px;\">\n      <div style=\"background: #f0f0f0; border-radius: 10px; overflow: hidden; height: 20px; position: relative;\">\n        <div id=\"imgConv-progress-bar\" style=\"background: #13284B; height: 100%; width: 0%; transition: width 0.3s;\"><\/div>\n        <span id=\"imgConv-progress-text\" style=\"position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 12px; color: #333; font-weight: 600;\"><\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div id=\"imgConv-summary\" role=\"status\" aria-live=\"polite\" style=\"display: none; background: #e7f5e7; padding: 20px; border-radius: 8px; margin-bottom: 20px; text-align: center;\">\n    <p style=\"margin: 0 0 8px; font-size: 24px; font-weight: 700; color: #28a745;\">\u5909\u63db\u5b8c\u4e86!<\/p>\n    <p style=\"margin: 0; font-size: 14px; color: #666;\" id=\"imgConv-summary-text\"><\/p>\n  <\/div>\n\n  <div id=\"imgConv-actions\" style=\"display: none; margin-bottom: 20px; gap: 12px; flex-wrap: wrap;\">\n    <button id=\"imgConv-download-all\" aria-label=\"\u5168\u3066\u306e\u753b\u50cf\u3092ZIP\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\" style=\"flex: 1; min-width: 200px; padding: 14px; background: #13284B; color: white; border: none; border-radius: 6px; font-size: 14px; font-weight: 600; cursor: pointer; height: 48px;\">\n      \u4e00\u62ec\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9(ZIP)\n    <\/button>\n    <button id=\"imgConv-reprocess\" aria-label=\"\u4ed6\u306e\u753b\u50cf\u3092\u5909\u63db\" style=\"flex: 1; min-width: 180px; padding: 14px; background: white; color: #13284B; border: 2px solid #13284B; border-radius: 6px; font-size: 14px; font-weight: 600; cursor: pointer; height: 48px;\">\n      \u4ed6\u306e\u753b\u50cf\u3092\u5909\u63db\u3059\u308b\n    <\/button>\n  <\/div>\n\n  <div id=\"imgConv-results\" role=\"region\" aria-label=\"\u51e6\u7406\u7d50\u679c\" style=\"display: none;\"><\/div>\n<\/div>\n\n<style>\n#imgConv-upload-area:hover {\n  border-color: #13284B;\n  background: #f0f8ff;\n}\n\n#imgConv-upload-area.has-files {\n  border-color: #28a745;\n  background: #f0fdf4;\n}\n\n.imgConv-result-item {\n  background: white;\n  border: 1px solid #e0e0e0;\n  border-radius: 6px;\n  padding: 16px;\n  margin-bottom: 12px;\n  display: flex;\n  gap: 16px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n\n.imgConv-thumbnail {\n  width: 80px;\n  height: 80px;\n  object-fit: cover;\n  border-radius: 4px;\n  border: 1px solid #e0e0e0;\n  flex-shrink: 0;\n}\n\n.imgConv-file-info {\n  flex: 1;\n  min-width: 200px;\n}\n\n.imgConv-file-actions {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n\n@media (max-width: 768px) {\n  .imgConv-result-item {\n    flex-direction: column;\n    align-items: flex-start;\n  }\n  \n  .imgConv-file-actions {\n    width: 100%;\n  }\n  \n  .imgConv-file-actions button {\n    flex: 1;\n  }\n}\n<\/style>\n\n<script src=\"https:\/\/media-api.qcdgv19414.rakkoserver.net\/lib\/jszip.min.js\"><\/script>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n  const imgConvState = {\n    files: [],\n    processedFiles: [],\n    objectUrls: []\n  };\n\n  const imgConvElements = {\n    inputSection: document.getElementById('imgConv-input-section'),\n    uploadArea: document.getElementById('imgConv-upload-area'),\n    uploadInitial: document.getElementById('imgConv-upload-initial'),\n    uploadSelected: document.getElementById('imgConv-upload-selected'),\n    fileCount: document.getElementById('imgConv-file-count'),\n    fileNames: document.getElementById('imgConv-file-names'),\n    fileInput: document.getElementById('imgConv-file-input'),\n    processBtn: document.getElementById('imgConv-process-btn'),\n    progress: document.getElementById('imgConv-progress'),\n    progressBar: document.getElementById('imgConv-progress-bar'),\n    progressText: document.getElementById('imgConv-progress-text'),\n    summary: document.getElementById('imgConv-summary'),\n    summaryText: document.getElementById('imgConv-summary-text'),\n    results: document.getElementById('imgConv-results'),\n    actions: document.getElementById('imgConv-actions'),\n    downloadAll: document.getElementById('imgConv-download-all'),\n    reprocess: document.getElementById('imgConv-reprocess'),\n    formatSelect: document.getElementById('imgConv-format-select')\n  };\n\n  \/\/ URL\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\n  function imgConvCleanupUrls() {\n    imgConvState.objectUrls.forEach(function(url) {\n      try { URL.revokeObjectURL(url); } catch (e) {}\n    });\n    imgConvState.objectUrls = [];\n  }\n\n  \/\/ \u8868\u793a\u66f4\u65b0\n  function imgConvUpdateUploadArea() {\n    if (imgConvState.files.length > 0) {\n      imgConvElements.uploadInitial.style.display = 'none';\n      imgConvElements.uploadSelected.style.display = 'block';\n      imgConvElements.uploadArea.classList.add('has-files');\n      imgConvElements.fileCount.textContent = imgConvState.files.length;\n      \n      const displayNames = imgConvState.files.slice(0, 3).map(f => f.name);\n      let namesText = displayNames.join(', ');\n      if (imgConvState.files.length > 3) namesText += ' \u4ed6' + (imgConvState.files.length - 3) + '\u4ef6';\n      imgConvElements.fileNames.textContent = namesText;\n      \n      imgConvElements.processBtn.disabled = false;\n      imgConvElements.processBtn.style.background = '#13284B';\n      imgConvElements.processBtn.style.cursor = 'pointer';\n      imgConvElements.processBtn.textContent = imgConvState.files.length + '\u679a\u306e\u753b\u50cf\u3092\u5909\u63db\u3059\u308b';\n    } else {\n      imgConvElements.uploadInitial.style.display = 'block';\n      imgConvElements.uploadSelected.style.display = 'none';\n      imgConvElements.uploadArea.classList.remove('has-files');\n      imgConvElements.processBtn.disabled = true;\n      imgConvElements.processBtn.style.background = '#ccc';\n      imgConvElements.processBtn.style.cursor = 'not-allowed';\n      imgConvElements.processBtn.textContent = '\u753b\u50cf\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044';\n    }\n  }\n\n  \/\/ \u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u30a4\u30d9\u30f3\u30c8\n  imgConvElements.uploadArea.addEventListener('click', () => imgConvElements.fileInput.click());\n  imgConvElements.uploadArea.addEventListener('dragover', (e) => {\n    e.preventDefault();\n    imgConvElements.uploadArea.style.borderColor = '#13284B';\n    if (!imgConvElements.uploadArea.classList.contains('has-files')) imgConvElements.uploadArea.style.background = '#e7f0ff';\n  });\n  imgConvElements.uploadArea.addEventListener('dragleave', (e) => {\n    e.preventDefault();\n    imgConvElements.uploadArea.style.borderColor = imgConvState.files.length > 0 ? '#28a745' : '#ccc';\n    if (!imgConvElements.uploadArea.classList.contains('has-files')) {\n      imgConvElements.uploadArea.style.background = '#fafafa';\n    } else {\n      imgConvElements.uploadArea.style.background = '#f0fdf4';\n    }\n  });\n  \n  imgConvElements.uploadArea.addEventListener('drop', (e) => {\n    e.preventDefault();\n    imgConvElements.uploadArea.style.borderColor = '#28a745';\n    imgConvElements.uploadArea.style.background = '#f0fdf4';\n    imgConvHandleFiles(Array.from(e.dataTransfer.files));\n  });\n\n  imgConvElements.fileInput.addEventListener('change', function() {\n    imgConvHandleFiles(Array.from(this.files));\n  });\n\n  function imgConvHandleFiles(files) {\n    const validTypes = ['image\/jpeg', 'image\/png', 'image\/gif', 'image\/webp'];\n    const validFiles = files.filter(f => validTypes.includes(f.type) && f.size > 0);\n\n    if (validFiles.length === 0 && files.length > 0) {\n      alert('\u6709\u52b9\u306a\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308a\u307e\u305b\u3093\u3002');\n      return;\n    }\n\n    \/\/ \u65e2\u5b58\u30ea\u30b9\u30c8\u306b\u8ffd\u52a0\n    const existingFileMap = new Map(imgConvState.files.map(f => [f.name, f]));\n    validFiles.forEach(f => existingFileMap.set(f.name, f));\n    \n    let allFiles = Array.from(existingFileMap.values());\n    if (allFiles.length > 30) {\n      alert('\u6700\u592730\u679a\u307e\u3067\u3067\u3059\u3002\u5148\u982d30\u679a\u306e\u307f\u51e6\u7406\u3057\u307e\u3059\u3002');\n      allFiles.splice(30);\n    }\n    \n    imgConvState.files = allFiles;\n    imgConvUpdateUploadArea();\n    \n    \/\/ UI\u30ea\u30bb\u30c3\u30c8\n    imgConvElements.summary.style.display = 'none';\n    imgConvElements.results.style.display = 'none';\n    imgConvElements.actions.style.display = 'none';\n    imgConvElements.fileInput.value = '';\n  }\n\n  \/\/ \u5909\u63db\u5b9f\u884c\n  imgConvElements.processBtn.addEventListener('click', imgConvProcessImages);\n\n  async function imgConvProcessImages() {\n    if (imgConvState.files.length === 0) return;\n    \n    imgConvCleanupUrls();\n    imgConvElements.processBtn.disabled = true;\n    imgConvElements.progress.style.display = 'block';\n    imgConvElements.summary.style.display = 'none';\n    imgConvElements.results.style.display = 'none';\n    \n    imgConvState.processedFiles = [];\n    const targetFormat = imgConvElements.formatSelect.value;\n    let totalBeforeSize = 0;\n    let totalAfterSize = 0;\n\n    for (let i = 0; i < imgConvState.files.length; i++) {\n      const file = imgConvState.files[i];\n      const progress = Math.round(((i + 1) \/ imgConvState.files.length) * 100);\n      imgConvElements.progressBar.style.width = progress + '%';\n      imgConvElements.progressText.textContent = `\u5909\u63db\u4e2d ${i + 1}\/${imgConvState.files.length}`;\n\n      try {\n        const result = await imgConvProcessSingleImage(file, targetFormat);\n        imgConvState.processedFiles.push(result);\n        if (!result.error) {\n          totalBeforeSize += result.beforeSize;\n          totalAfterSize += result.afterSize;\n          imgConvState.objectUrls.push(result.beforeUrl);\n          imgConvState.objectUrls.push(result.afterUrl);\n        }\n      } catch (error) {\n        imgConvState.processedFiles.push({ name: file.name, error: true, errorMessage: '\u51e6\u7406\u5931\u6557' });\n      }\n    }\n\n    setTimeout(() => {\n      imgConvElements.progress.style.display = 'none';\n      imgConvShowResults(totalBeforeSize, totalAfterSize);\n    }, 500);\n  }\n\n  function imgConvProcessSingleImage(file, targetFormat) {\n    return new Promise(resolve => {\n      const reader = new FileReader();\n      reader.onload = e => {\n        const img = new Image();\n        img.onload = () => {\n          const canvas = document.createElement('canvas');\n          const ctx = canvas.getContext('2d');\n          canvas.width = img.width;\n          canvas.height = img.height;\n\n          \/\/ JPEG\u5909\u63db\u6642\u306f\u80cc\u666f\u3092\u767d\u306b\u3059\u308b(\u900f\u904e\u5bfe\u7b56)\n          if (targetFormat === 'image\/jpeg') {\n            ctx.fillStyle = '#FFFFFF';\n            ctx.fillRect(0, 0, canvas.width, canvas.height);\n          }\n\n          ctx.drawImage(img, 0, 0);\n\n          \/\/ WebP\u306a\u30890.9\u3001\u305d\u306e\u4ed6\u30820.9\u306e\u9ad8\u753b\u8cea\u8a2d\u5b9a\n          canvas.toBlob(blob => {\n            if (!blob) {\n              resolve({ name: file.name, error: true, errorMessage: '\u5909\u63db\u5931\u6557' });\n              return;\n            }\n            resolve({\n              name: file.name,\n              beforeSize: file.size,\n              afterSize: blob.size,\n              beforeUrl: e.target.result,\n              afterUrl: URL.createObjectURL(blob),\n              blob: blob,\n              format: targetFormat,\n              error: false\n            });\n          }, targetFormat, 0.9);\n        };\n        img.onerror = () => resolve({ name: file.name, error: true, errorMessage: '\u753b\u50cf\u8aad\u8fbc\u30a8\u30e9\u30fc' });\n        img.src = e.target.result;\n      };\n      reader.onerror = () => resolve({ name: file.name, error: true, errorMessage: '\u30d5\u30a1\u30a4\u30eb\u8aad\u8fbc\u30a8\u30e9\u30fc' });\n      reader.readAsDataURL(file);\n    });\n  }\n\n  function imgConvShowResults(before, after) {\n    imgConvElements.inputSection.style.display = 'none';\n    \n    \/\/ \u30b5\u30a4\u30ba\u5897\u6e1b\u306e\u8a08\u7b97\n    const diff = after - before;\n    const diffText = diff < 0 \n      ? `\u5408\u8a08 ${imgConvFormatSize(Math.abs(diff))} \u8efd\u304f\u306a\u308a\u307e\u3057\u305f` \n      : `\u5909\u63db\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f`;\n    \n    imgConvElements.summaryText.textContent = diffText;\n    imgConvElements.summary.style.display = 'block';\n    imgConvElements.actions.style.display = 'flex';\n    \n    let html = '';\n    imgConvState.processedFiles.forEach((file, idx) => {\n      if (file.error) {\n        html += `<div class=\"imgConv-result-item\"><div class=\"imgConv-file-info\"><p style=\"font-weight:600;margin:0;\">${imgConvEscapeHtml(file.name)}<\/p><p style=\"color:red;margin:0;\">${file.errorMessage}<\/p><\/div><\/div>`;\n      } else {\n        const sizeClass = file.afterSize < file.beforeSize ? '#28a745' : '#666';\n        html += `\n          <div class=\"imgConv-result-item\">\n            <img decoding=\"async\" src=\"${file.afterUrl}\" class=\"imgConv-thumbnail\">\n            <div class=\"imgConv-file-info\">\n              <p style=\"font-weight:600;margin:0 0 4px;\">${imgConvEscapeHtml(file.name)}<\/p>\n              <p style=\"margin:0;font-size:13px;color:#666;\">\n                ${imgConvFormatSize(file.beforeSize)} \u2192 <span style=\"font-weight:bold;color:${sizeClass}\">${imgConvFormatSize(file.afterSize)}<\/span>\n              <\/p>\n            <\/div>\n            <div class=\"imgConv-file-actions\">\n              <button onclick=\"imgConvDownloadFile(${idx})\" style=\"padding:8px 16px;background:#13284B;color:white;border:none;border-radius:4px;cursor:pointer;\">\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/button>\n            <\/div>\n          <\/div>`;\n      }\n    });\n    \n    imgConvElements.results.innerHTML = html;\n    imgConvElements.results.style.display = 'block';\n  }\n\n  \/\/ \u500b\u5225\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\n  window.imgConvDownloadFile = function(index) {\n    const file = imgConvState.processedFiles[index];\n    const link = document.createElement('a');\n    link.href = file.afterUrl;\n    link.download = imgConvGetDownloadFilename(file.name, file.format);\n    link.click();\n  };\n\n  \/\/ \u4e00\u62ec\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\n  imgConvElements.downloadAll.addEventListener('click', async function() {\n    const validFiles = imgConvState.processedFiles.filter(f => !f.error);\n    if (!validFiles.length) return;\n    \n    this.disabled = true;\n    this.textContent = 'ZIP\u4f5c\u6210\u4e2d...';\n    try {\n      const zip = new JSZip();\n      validFiles.forEach(f => zip.file(imgConvGetDownloadFilename(f.name, f.format), f.blob));\n      const content = await zip.generateAsync({type: 'blob'});\n      const link = document.createElement('a');\n      link.href = URL.createObjectURL(content);\n      link.download = 'converted_images.zip';\n      link.click();\n      setTimeout(() => URL.revokeObjectURL(link.href), 1000);\n    } catch(e) { alert('ZIP\u4f5c\u6210\u30a8\u30e9\u30fc'); }\n    this.disabled = false;\n    this.textContent = '\u4e00\u62ec\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9(ZIP)';\n  });\n\n  \/\/ \u518d\u51e6\u7406\u30dc\u30bf\u30f3 - \u5b8c\u5168\u306a\u72b6\u614b\u30ea\u30bb\u30c3\u30c8\n  imgConvElements.reprocess.addEventListener('click', () => {\n    \/\/ \u72b6\u614b\u3092\u5b8c\u5168\u306b\u30ea\u30bb\u30c3\u30c8\n    imgConvCleanupUrls();\n    imgConvState.files = [];\n    imgConvState.processedFiles = [];\n    \n    \/\/ UI\u3092\u30ea\u30bb\u30c3\u30c8\n    imgConvElements.fileInput.value = '';\n    imgConvUpdateUploadArea();\n    imgConvElements.processBtn.disabled = false;\n    imgConvElements.progressBar.style.width = '0%';\n    imgConvElements.progressText.textContent = '';\n    \n    \/\/ \u8868\u793a\u5207\u308a\u66ff\u3048\n    imgConvElements.inputSection.style.display = 'block';\n    imgConvElements.progress.style.display = 'none';\n    imgConvElements.summary.style.display = 'none';\n    imgConvElements.results.style.display = 'none';\n    imgConvElements.actions.style.display = 'none';\n    \n    window.scrollTo({ top: 0, behavior: 'smooth' });\n  });\n\n  function imgConvFormatSize(bytes) {\n    if (bytes === 0) return '0 B';\n    const i = Math.floor(Math.log(bytes) \/ Math.log(1024));\n    return parseFloat((bytes \/ Math.pow(1024, i)).toFixed(2)) + ' ' + ['B', 'KB', 'MB', 'GB'][i];\n  }\n\n  function imgConvGetDownloadFilename(originalName, format) {\n    const name = originalName.replace(\/\\.[^\/.]+$\/, '');\n    const ext = format.split('\/')[1] === 'jpeg' ? 'jpg' : format.split('\/')[1];\n    return `${name}.${ext}`;\n  }\n\n  function imgConvEscapeHtml(text) {\n    const div = document.createElement('div');\n    div.textContent = text;\n    return div.innerHTML;\n  }\n});\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-0\">\u3053\u306e\u30c4\u30fc\u30eb\u3067\u3067\u304d\u308b\u3053\u3068<\/h2>\n\n\n\n<p>\u3053\u306e\u30c4\u30fc\u30eb\u306f\u3001\u30bd\u30d5\u30c8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u4e0d\u8981\u3067\u3001\u30d6\u30e9\u30a6\u30b6\u304b\u3089\u3059\u3050\u306b\u4f7f\u3048\u308b\u753b\u50cf\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5909\u63db\u30c4\u30fc\u30eb\u3067\u3059\u3002\u4e3b\u306b\u4ee5\u4e0b\u306e\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>WebP\u753b\u50cf\u3078\u306e\u5909\u63db<\/strong> JPG\u3084PNG\u753b\u50cf\u3092\u3001\u6b21\u4e16\u4ee3\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u3042\u308b\u300cWebP\uff08\u30a6\u30a7\u30c3\u30d4\u30fc\uff09\u300d\u3078\u8efd\u91cf\u5316\u30fb\u5909\u63db\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>WebP\u753b\u50cf\u304b\u3089\u306e\u5909\u63db<\/strong> \u300c\u4fdd\u5b58\u3057\u305f\u3051\u308c\u3069\u958b\u3051\u306a\u304f\u3066\u56f0\u308b\u300d\u3053\u3068\u304c\u591a\u3044WebP\u753b\u50cf\u3092\u3001\u6c4e\u7528\u6027\u306e\u9ad8\u3044JPEG\u3084PNG\u3078\u5909\u63db\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u8907\u6570\u753b\u50cf\u306e\u4e00\u62ec\u51e6\u7406<\/strong> \u6700\u592730\u679a\u307e\u3067\u306e\u753b\u50cf\u3092\u4e00\u5ea6\u306b\u30c9\u30e9\u30c3\u30b0\uff06\u30c9\u30ed\u30c3\u30d7\u3057\u3001\u307e\u3068\u3081\u3066\u5909\u63db\u30fbZIP\u5f62\u5f0f\u3067\u306e\u4e00\u62ec\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u304c\u53ef\u80fd\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5b8c\u5168\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u5909\u63db\uff08\u5b89\u5fc3\u8a2d\u8a08\uff09<\/strong> \u753b\u50cf\u30c7\u30fc\u30bf\u3092\u5916\u90e8\u30b5\u30fc\u30d0\u30fc\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u305b\u305a\u3001\u3042\u306a\u305f\u306e\u30d6\u30e9\u30a6\u30b6\u4e0a\u3067\u5909\u63db\u51e6\u7406\u3092\u5b8c\u7d50\u3055\u305b\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u5199\u771f\u3084\u6a5f\u5bc6\u60c5\u5831\u3092\u542b\u3080\u753b\u50cf\u3067\u3082\u5b89\u5fc3\u3057\u3066\u3054\u5229\u7528\u3044\u305f\u3060\u3051\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-1\">\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u306e\u624b\u9806<\/h2>\n\n\n\n<p>\u8ab0\u3067\u3082\u76f4\u611f\u7684\u306b\u64cd\u4f5c\u3067\u304d\u308b\u3088\u3046\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>\u753b\u50cf\u306e\u9078\u629e<\/strong> \u5909\u63db\u3057\u305f\u3044\u753b\u50cf\u3092\u70b9\u7dda\u306e\u67a0\u5185\u306b\u30c9\u30e9\u30c3\u30b0\uff06\u30c9\u30ed\u30c3\u30d7\u3059\u308b\u304b\u3001\u30af\u30ea\u30c3\u30af\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u307e\u3059\u3002\uff08\u6700\u592730\u679a\u307e\u3067\u9078\u629e\u53ef\u80fd\uff09<\/li>\n\n\n\n<li><strong>\u5909\u63db\u5f62\u5f0f\u306e\u6307\u5b9a<\/strong> \u5909\u63db\u5f8c\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\uff08WebP\u3001JPEG\u3001PNG\uff09\u3092\u9078\u629e\u3057\u307e\u3059\u3002\n<ul class=\"wp-block-list\">\n<li><strong>WebP\uff1a<\/strong> \u30b5\u30a4\u30c8\u8868\u793a\u3092\u901f\u304f\u3057\u305f\u3044\u5834\u5408\u306b\u63a8\u5968\uff08\u8efd\u91cf\uff09<\/li>\n\n\n\n<li><strong>JPEG\uff1a<\/strong> \u5199\u771f\u306a\u3069\u3092\u6c4e\u7528\u7684\u306b\u6271\u3044\u305f\u3044\u5834\u5408\u306b\u63a8\u5968<\/li>\n\n\n\n<li><strong>PNG\uff1a<\/strong> \u753b\u8cea\u3092\u52a3\u5316\u3055\u305b\u305f\u304f\u306a\u3044\u3001\u80cc\u666f\u900f\u904e\u3092\u4f7f\u3044\u305f\u3044\u5834\u5408\u306b\u63a8\u5968<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u5909\u63db\u5b9f\u884c<\/strong> \u300c\u753b\u50cf\u3092\u5909\u63db\u3059\u308b\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u5373\u5ea7\u306b\u51e6\u7406\u304c\u59cb\u307e\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/strong> \u5909\u63db\u304c\u5b8c\u4e86\u3059\u308b\u3068\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30dc\u30bf\u30f3\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u500b\u5225\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u304b\u3001\u300c\u4e00\u62ec\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9(ZIP)\u300d\u30dc\u30bf\u30f3\u3067\u307e\u3068\u3081\u3066\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-2\">\u3053\u306e\u30c4\u30fc\u30eb\u3067\u6271\u3046\u753b\u50cf\u5f62\u5f0f\u306e\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<p>\u5909\u63db\u524d\u5f8c\u306e\u5f62\u5f0f\u9078\u3073\u3067\u8ff7\u308f\u306a\u3044\u3088\u3046\u3001\u5404\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u7279\u5fb4\u3092\u7c21\u5358\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>WebP\uff08\u30a6\u30a7\u30c3\u30d4\u30fc\uff09<\/strong> Google\u304c\u958b\u767a\u3057\u305f\u65b0\u3057\u3044\u753b\u50cf\u5f62\u5f0f\u3067\u3059\u3002JPEG\u3084PNG\u3068\u540c\u7b49\u306e\u753b\u8cea\u3092\u4fdd\u3061\u306a\u304c\u3089\u3001\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u3092\u5927\u5e45\u306b\uff0820\u301c30%\u7a0b\u5ea6\uff09\u8efd\u91cf\u5316\u3067\u304d\u307e\u3059\u3002\u80cc\u666f\u900f\u904e\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u304a\u308a\u3001\u73fe\u5728\u306eWeb\u30b5\u30a4\u30c8\u5236\u4f5c\u306e\u6a19\u6e96\u3068\u306a\u308a\u3064\u3064\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>JPEG\uff08\u30b8\u30a7\u30a4\u30da\u30b0\uff09<\/strong> \u30c7\u30b8\u30ab\u30e1\u5199\u771f\u306a\u3069\u3067\u6700\u3082\u4e00\u822c\u7684\u306b\u4f7f\u308f\u308c\u308b\u5f62\u5f0f\u3067\u3059\u3002\u9ad8\u3044\u5727\u7e2e\u7387\u3067\u5bb9\u91cf\u3092\u5c0f\u3055\u304f\u3067\u304d\u307e\u3059\u304c\u3001\u4e00\u5ea6\u5727\u7e2e\u3059\u308b\u3068\u753b\u8cea\u304c\u5c11\u3057\u52a3\u5316\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u80cc\u666f\u900f\u904e\uff08\u900f\u660e\u90e8\u5206\uff09\u306b\u306f\u5bfe\u5fdc\u3057\u3066\u304a\u3089\u305a\u3001\u900f\u904e\u90e8\u5206\u306f\u81ea\u52d5\u7684\u306b\u300c\u767d\u300d\u306b\u306a\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>PNG\uff08\u30d4\u30f3\u30b0\uff09<\/strong> \u753b\u8cea\u3092\u52a3\u5316\u3055\u305b\u305a\u306b\u4fdd\u5b58\u3067\u304d\u308b\u5f62\u5f0f\u3067\u3059\u3002\u30a4\u30e9\u30b9\u30c8\u3084\u30ed\u30b4\u3001\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u306a\u3069\u3001\u5883\u754c\u7dda\u304c\u304f\u3063\u304d\u308a\u3068\u3057\u305f\u753b\u50cf\u306b\u5411\u3044\u3066\u3044\u307e\u3059\u3002\u80cc\u666f\u900f\u904e\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u5199\u771f\u306a\u3069\u306e\u8907\u96d1\u306a\u753b\u50cf\u3067\u306f\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u304c\u5927\u304d\u304f\u306a\u308a\u3084\u3059\u3044\u50be\u5411\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">\u3053\u306e\u30c4\u30fc\u30eb\u304c\u5f79\u7acb\u3064\u3068\u304d\u306f\u3069\u3093\u306a\u3068\u304d\uff1f<\/h2>\n\n\n\n<p>\u65e5\u5e38\u306e\u3061\u3087\u3063\u3068\u3057\u305f\u300c\u56f0\u3063\u305f\u300d\u304b\u3089\u3001\u5c02\u9580\u7684\u306a\u696d\u52d9\u307e\u3067\u5e45\u5e83\u304f\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u300cWebP\u304c\u958b\u3051\u306a\u3044\u300d\u3092\u89e3\u6c7a\u3057\u305f\u3044\u3068\u304d<\/strong> \u30cd\u30c3\u30c8\u304b\u3089\u4fdd\u5b58\u3057\u305f\u753b\u50cf\u304cWebP\u5f62\u5f0f\u3067\u3001\u624b\u6301\u3061\u306e\u30d3\u30e5\u30fc\u30ef\u30fc\u3084\u7de8\u96c6\u30bd\u30d5\u30c8\u3067\u958b\u3051\u306a\u304b\u3063\u305f\u969b\u306b\u3001\u4e00\u822c\u7684\u306aJPEG\u3084PNG\u306b\u623b\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30d6\u30ed\u30b0\u3084\u30b5\u30a4\u30c8\u306e\u8868\u793a\u901f\u5ea6\u3092\u4e0a\u3052\u305f\u3044\u3068\u304d<\/strong> \u8a18\u4e8b\u306b\u4f7f\u3046\u753b\u50cf\u3092WebP\u306b\u5909\u63db\u3057\u3066\u63b2\u8f09\u3059\u308b\u3053\u3068\u3067\u3001\u30da\u30fc\u30b8\u306e\u8aad\u307f\u8fbc\u307f\u901f\u5ea6\u3092\u6539\u5584\u3057\u3001SEO\u52b9\u679c\uff08\u691c\u7d22\u9806\u4f4d\u30a2\u30c3\u30d7\uff09\u3092\u9ad8\u3081\u305f\u3044Web\u62c5\u5f53\u8005\u3084\u30d6\u30ed\u30ac\u30fc\u306b\u6700\u9069\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30b9\u30de\u30db\u306e\u5bb9\u91cf\u3092\u7bc0\u7d04\u3057\u305f\u3044\u3068\u304d<\/strong> \u5927\u91cf\u306e\u5199\u771f\u3092\u753b\u8cea\u3092\u4fdd\u3063\u305f\u307e\u307eWebP\u306b\u5909\u63db\u3059\u308b\u3053\u3068\u3067\u3001\u4fdd\u5b58\u5bb9\u91cf\u3092\u7bc0\u7d04\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u793e\u5916\u79d8\u306e\u753b\u50cf\u3092\u51e6\u7406\u3057\u305f\u3044\u3068\u304d<\/strong> \u30b5\u30fc\u30d0\u30fc\u306b\u30c7\u30fc\u30bf\u3092\u9001\u308a\u305f\u304f\u306a\u3044\u696d\u52d9\u8cc7\u6599\u3084\u3001\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u5199\u771f\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5909\u63db\u3092\u5b89\u5168\u306b\u884c\u3044\u305f\u3044\u5834\u5408\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">WebP\u5909\u63db\u306b\u95a2\u3059\u308b\u3088\u304f\u3042\u308b\u8cea\u554f<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Q. \u672c\u5f53\u306b\u7121\u6599\u3067\u3059\u304b\uff1f<\/strong> \u306f\u3044\u3001\u5b8c\u5168\u7121\u6599\u3067\u3059\u3079\u3066\u306e\u6a5f\u80fd\u3092\u3054\u5229\u7528\u3044\u305f\u3060\u3051\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>Q. \u753b\u8cea\u306f\u52a3\u5316\u3057\u307e\u3059\u304b\uff1f<\/strong> WebP\u3078\u306e\u5909\u63db\u3084JPEG\u3078\u306e\u5909\u63db\u6642\u306f\u3001\u4eba\u9593\u306e\u76ee\u306b\u306f\u307b\u3068\u3093\u3069\u5206\u304b\u3089\u306a\u3044\u30ec\u30d9\u30eb\uff08\u753b\u8cea90%\u8a2d\u5b9a\uff09\u3067\u6700\u9069\u5316\u3092\u884c\u3044\u3001\u5bb9\u91cf\u3092\u524a\u6e1b\u3057\u3066\u3044\u307e\u3059\u3002PNG\u3078\u306e\u5909\u63db\u306f\u53ef\u9006\u5727\u7e2e\uff08\u753b\u8cea\u52a3\u5316\u306a\u3057\uff09\u3068\u306a\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>Q. \u30b9\u30de\u30db\u3067\u3082\u4f7f\u3048\u307e\u3059\u304b\uff1f<\/strong> \u306f\u3044\u3001iPhone\u3084Android\u306e\u30d6\u30e9\u30a6\u30b6\u304b\u3089\u3082\u554f\u984c\u306a\u304f\u3054\u5229\u7528\u3044\u305f\u3060\u3051\u307e\u3059\u3002<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u5b89\u5fc3\u8a2d\u8a08:\u753b\u50cf\u306f\u304a\u5ba2\u69d8\u306e\u7aef\u672b\u5185\u3067\u5909\u63db\u3055\u308c\u3001\u30b5\u30fc\u30d0\u30fc\u306b\u306f\u9001\u4fe1\u3055\u308c\u307e\u305b\u3093 \u753b\u50cf\u3092\u30c9\u30e9\u30c3\u30b0&amp;\u30c9\u30ed\u30c3\u30d7 \u307e\u305f\u306f\u30af\u30ea\u30c3\u30af\u3057\u3066\u9078\u629e \u5bfe\u5fdc\u5f62\u5f0f: JPG, PNG, GIF, WEBP(\u6700\u592730\u679a) 0\u679a\u9078\u629e\u6e08 \u30af\u30ea\u30c3\u30af\u3067\u3055\u3089 &#8230; <\/p>\n","protected":false},"author":4,"featured_media":12126,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32,8,31],"tags":[],"class_list":{"0":"post-12119","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-web-design","8":"category-tool","9":"category-conversion","10":"entry"},"_links":{"self":[{"href":"https:\/\/rakkoserver.com\/plus\/wp-json\/wp\/v2\/posts\/12119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rakkoserver.com\/plus\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rakkoserver.com\/plus\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rakkoserver.com\/plus\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/rakkoserver.com\/plus\/wp-json\/wp\/v2\/comments?post=12119"}],"version-history":[{"count":6,"href":"https:\/\/rakkoserver.com\/plus\/wp-json\/wp\/v2\/posts\/12119\/revisions"}],"predecessor-version":[{"id":12125,"href":"https:\/\/rakkoserver.com\/plus\/wp-json\/wp\/v2\/posts\/12119\/revisions\/12125"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rakkoserver.com\/plus\/wp-json\/wp\/v2\/media\/12126"}],"wp:attachment":[{"href":"https:\/\/rakkoserver.com\/plus\/wp-json\/wp\/v2\/media?parent=12119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rakkoserver.com\/plus\/wp-json\/wp\/v2\/categories?post=12119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rakkoserver.com\/plus\/wp-json\/wp\/v2\/tags?post=12119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}