{"id":5487,"date":"2025-12-28T10:59:36","date_gmt":"2025-12-28T01:59:36","guid":{"rendered":"https:\/\/tomato-made.com\/study\/?p=5487"},"modified":"2026-02-27T09:31:52","modified_gmt":"2026-02-27T00:31:52","slug":"t23","status":"publish","type":"post","link":"https:\/\/tomato-made.com\/study\/market-z\/t23","title":{"rendered":"\u753b\u50cf\u30b5\u30a4\u30ba\u5909\u66f4\u30c4\u30fc\u30eb\uff5c\u30b9\u30de\u30db\u30fb\u30d1\u30bd\u30b3\u30f3\u5bfe\u5fdc\uff0f\u4e00\u62ec\u30ea\u30b5\u30a4\u30ba\u7121\u6599"},"content":{"rendered":"\n<style>\n \n\/* \u25bc \u30d1\u30f3\u304f\u305a\u30ea\u30b9\u30c8\u975e\u8868\u793a *\/\n  .breadcrumb {\n    display: none !important;\n  }\n\n\n\/* \u25bc \u8a18\u4e8b\u30bf\u30a4\u30c8\u30eb\u30fb\u30d1\u30f3\u304f\u305a\u30fb\u30e1\u30bf\u60c5\u5831\u306a\u3069\u306e\u30de\u30fc\u30b8\u30f3\/\u30d1\u30c7\u30a3\u30f3\u30b0\u3092\u9664\u53bb *\/\n.article-header.entry-header,\n.entry-meta,\n.entry-meta.vcard,\n.post-thumbnail {\n  margin-top: 0 !important;\n  padding-top: 0 !important;\n}\n\n\/* \u25bc \u30a2\u30a4\u30ad\u30e3\u30c3\u30c1\u753b\u50cf\u306e\u56f2\u307f\uff08<p class=\"post-thumbnail\">\uff09\u306b\u9699\u9593\u304c\u3042\u308b\u5834\u5408\u306b\u5099\u3048\u3066 *\/\n.post-thumbnail {\n  margin-top: 0 !important;\n  padding-top: 0 !important;\n}\n\n\n  \/* \u25bc \u6295\u7a3f\u65e5\u6642\u30fb\u30e1\u30bf\u60c5\u5831\u3092\u975e\u8868\u793a *\/\n  .post-meta,\n  .post-date,\n  .entry-meta,\n  .published {\n    display: none !important;\n  }\n\n\/* \u25bc \u30a2\u30a4\u30ad\u30e3\u30c3\u30c1\u753b\u50cf\u306e\u56f2\u307f\uff08<p class=\"post-thumbnail\">\uff09\u306b\u9699\u9593\u304c\u3042\u308b\u5834\u5408\u306b\u5099\u3048\u3066 *\/\n.post-thumbnail {\n  margin-top: 0 !important;\n  padding-top: 0 !important;\n}\n\n  \/* \u25bc \u8a18\u4e8b\u30bf\u30a4\u30c8\u30eb\u975e\u8868\u793a\uff08\u5fc5\u8981\u306b\u5fdc\u3058\u3066\uff09 *\/\n  .entry-title {\n    display: none !important;\n  }\n\/* \u25bc \u6295\u7a3f\u8a18\u4e8b\u306e\u30d8\u30c3\u30c0\u30fc\u30a2\u30a4\u30ad\u30e3\u30c3\u30c1\u3092\u975e\u8868\u793a *\/\n.single .post-thumbnail {\n  display: none !important;\n}\n\n\n<\/style>\n\n\n\n<div id=\"tmResizeTool_final2\">\n<style>\n#tmResizeTool_final2{\n  font-family:\"Segoe UI\",\"Hiragino Kaku Gothic ProN\",Meiryo,sans-serif;\n  background:#fff5f7;\n  color:#5a2b34;\n  padding:16px;\n  border-radius:16px;\n}\n#tmResizeTool_final2 h1{\n  text-align:center;\n  font-size:22px;\n  margin:0 0 16px;\n  color:#e56b8c;\n}\n\n.tm-box{\n  background:#fff;\n  border-radius:14px;\n  padding:14px;\n  margin-top:14px;\n  border:1px solid rgba(229,107,140,.35);\n}\n.tm-step{\n  font-weight:700;\n  color:#e56b8c;\n  margin-bottom:8px;\n}\n.tm-row{\n  display:flex;\n  gap:14px;\n  flex-wrap:wrap;\n  align-items:center;\n}\n.tm-btn{\n  background:#e56b8c;\n  color:#fff;\n  border:none;\n  padding:8px 20px;\n  border-radius:999px;\n  cursor:pointer;\n  font-weight:700;\n}\n.tm-row input{\n  padding:6px 8px;\n  border-radius:10px;\n  border:1px solid #f1c6d2;\n  font-size:14px;\n}\n.tm-row select{\n  padding:6px 44px 6px 12px;\n  border-radius:10px;\n  border:1px solid #f1c6d2;\n  font-size:14px;\n  appearance:none;\n  background:\n    #fff\n    url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 20 20'%3E%3Cpath d='M5 7l5 6 5-6z' fill='%23e56b8c'\/%3E%3C\/svg%3E\")\n    no-repeat right 14px center \/ 12px;\n}\n\n\/* \u89d2\u4e38\u30b9\u30e9\u30a4\u30c0\u30fc *\/\n.tm-range{\n  width:220px;\n  max-width:100%;\n}\n.tm-note{\n  font-size:12px;\n  color:#8a4a57;\n  opacity:.95;\n}\n\n\/* \u30d7\u30ec\u30d3\u30e5\u30fc *\/\n#tm-preview{\n  display:grid;\n  grid-template-columns:repeat(auto-fill,minmax(140px,1fr));\n  gap:12px;\n}\n\n\/* \u900f\u660e\u78ba\u8a8d\u7528\u5e02\u677e *\/\n.tm-thumb{\n  padding:6px;\n  background-image:\n    linear-gradient(45deg, #eee 25%, transparent 25%),\n    linear-gradient(-45deg, #eee 25%, transparent 25%),\n    linear-gradient(45deg, transparent 75%, #eee 75%),\n    linear-gradient(-45deg, transparent 75%, #eee 75%);\n  background-size: 18px 18px;\n  background-position: 0 0, 0 9px, 9px -9px, -9px 0px;\n}\n\n.tm-thumb img{\n  width:100%;\n  border-radius:0; \/* \u2190 \u5e38\u306b\u56db\u89d2\u8868\u793a\uff08\u91cd\u8981\uff09 *\/\n  cursor:pointer;\n  box-shadow:0 4px 10px rgba(0,0,0,.08);\n  display:block;\n  background:transparent;\n}\n\n\/* \u30e9\u30a4\u30c8\u30dc\u30c3\u30af\u30b9 *\/\n#tm-lightbox{\n  position:fixed;\n  inset:0;\n  background:rgba(0,0,0,.85);\n  display:none;\n  z-index:9999;\n}\n#tm-lightbox-inner{\n  position:relative;\n  max-width:92vw;\n  max-height:92vh;\n  margin:auto;\n}\n#tm-lightbox-inner img{\n  max-width:100%;\n  max-height:100%;\n  display:block;\n  border-radius:0; \/* \u2190 \u62e1\u5927\u3082\u56db\u89d2\u8868\u793a *\/\n}\n\n\/* \u00d7\u30dc\u30bf\u30f3 *\/\n#tm-close{\n  position:absolute;\n  top:-12px;\n  right:-12px;\n  background:#e56b8c;\n  color:#fff;\n  width:32px;\n  height:32px;\n  border-radius:50%;\n  line-height:32px;\n  text-align:center;\n  font-size:20px;\n  font-weight:700;\n  cursor:pointer;\n}\n<\/style>\n\n<h1 id=\"i-0\">\u753b\u50cf\u30ea\u30b5\u30a4\u30ba\u30c4\u30fc\u30eb<\/h1>\n\n<div class=\"tm-box\">\n  <div class=\"tm-step\">\u2460 \u753b\u50cf\u3092\u9078\u629e\uff08\u8907\u6570\u53ef\uff09<\/div>\n  <button class=\"tm-btn\" id=\"tm-pick\">\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u3076<\/button>\n  <input type=\"file\" id=\"tm-file\" accept=\"image\/*\" multiple style=\"display:none\">\n<\/div>\n\n<div class=\"tm-box\">\n  <div class=\"tm-step\">\u2461 \u30b5\u30a4\u30ba\u30fb\u89d2\u4e38\u30fb\u4fdd\u5b58\u5f62\u5f0f<\/div>\n  <div class=\"tm-row\">\n    <label>\u6700\u5927\u6a2a\u5e45(px)\n      <input type=\"number\" id=\"tm-width\" value=\"1200\" min=\"1\">\n    <\/label>\n\n    <label>\u89d2\u4e38(px)\n      <input type=\"range\" id=\"tm-radius\" class=\"tm-range\" min=\"0\" max=\"200\" value=\"0\">\n      <span id=\"tm-radius-val\">0<\/span>px\n    <\/label>\n\n    <label>\u4fdd\u5b58\u5f62\u5f0f\n      <select id=\"tm-format\">\n        <option value=\"original\">\u5143\u306e\u5f62\u5f0f\u306e\u307e\u307e<\/option>\n        <option value=\"image\/jpeg\">JPEG<\/option>\n        <option value=\"image\/png\">PNG<\/option>\n        <option value=\"image\/webp\">WEBP<\/option>\n      <\/select>\n    <\/label>\n  <\/div>\n  <div class=\"tm-note\">\n    \u203b\u89d2\u4e38\u306f PNG \/ WEBP \u306e\u3068\u304d\u306e\u307f\u900f\u660e\u3067\u53cd\u6620\u3055\u308c\u307e\u3059\n  <\/div>\n<\/div>\n\n<div class=\"tm-box\">\n  <div class=\"tm-step\">\u2462 \u30ea\u30b5\u30a4\u30ba\u5f8c\u30d7\u30ec\u30d3\u30e5\u30fc\uff08\u30bf\u30c3\u30d7\u3067\u62e1\u5927\uff09<\/div>\n  <div id=\"tm-preview\"><\/div>\n<\/div>\n\n<div class=\"tm-box\" style=\"text-align:center\">\n  <button class=\"tm-btn\" id=\"tm-save\" disabled>\u3053\u306e\u5185\u5bb9\u3067\u4e00\u62ec\u4fdd\u5b58<\/button>\n<\/div>\n\n<div id=\"tm-lightbox\">\n  <div id=\"tm-lightbox-inner\">\n    <span id=\"tm-close\">\u00d7<\/span>\n    <img id=\"tm-lightbox-img\">\n  <\/div>\n<\/div>\n\n<script>\n(() => {\n  const pick = document.getElementById(\"tm-pick\");\n  const fileInput = document.getElementById(\"tm-file\");\n  const widthInput = document.getElementById(\"tm-width\");\n  const radiusInput = document.getElementById(\"tm-radius\");\n  const radiusVal = document.getElementById(\"tm-radius-val\");\n  const formatSelect = document.getElementById(\"tm-format\");\n  const preview = document.getElementById(\"tm-preview\");\n  const saveBtn = document.getElementById(\"tm-save\");\n\n  const lightbox = document.getElementById(\"tm-lightbox\");\n  const lightImg = document.getElementById(\"tm-lightbox-img\");\n  const closeBtn = document.getElementById(\"tm-close\");\n\n  let sources = [];\n  let outputs = [];\n  let renderToken = 0;\n\n  pick.onclick = () => fileInput.click();\n\n  fileInput.onchange = async e => {\n    sources = [];\n    for (const f of e.target.files) {\n      const img = new Image();\n      img.src = URL.createObjectURL(f);\n      await img.decode();\n      sources.push({ file: f, w: img.width, h: img.height });\n    }\n    render();\n  };\n\n  widthInput.addEventListener(\"change\", render);\n  formatSelect.addEventListener(\"change\", render);\n\n  radiusInput.addEventListener(\"input\", () => {\n    radiusVal.textContent = radiusInput.value;\n  });\n  radiusInput.addEventListener(\"change\", render);\n\n  function roundedRectPath(ctx, x, y, w, h, r) {\n    const radius = Math.max(0, Math.min(r, w \/ 2, h \/ 2));\n    ctx.beginPath();\n    ctx.moveTo(x + radius, y);\n    ctx.arcTo(x + w, y, x + w, y + h, radius);\n    ctx.arcTo(x + w, y + h, x, y + h, radius);\n    ctx.arcTo(x, y + h, x, y, radius);\n    ctx.arcTo(x, y, x + w, y, radius);\n    ctx.closePath();\n  }\n\n  function getMime(srcFileType){\n    const fmt = formatSelect.value;\n    let mime = (fmt === \"original\") ? srcFileType : fmt;\n    if(![\"image\/jpeg\",\"image\/png\",\"image\/webp\"].includes(mime)){\n      mime = \"image\/jpeg\";\n    }\n    return mime;\n  }\n\n  async function render(){\n    const token = ++renderToken;\n    preview.innerHTML = \"\";\n    outputs = [];\n    saveBtn.disabled = true;\n    if(!sources.length) return;\n\n    const maxW = parseInt(widthInput.value, 10) || 1200;\n    const r = parseInt(radiusInput.value, 10) || 0;\n\n    for(const src of sources){\n      if (token !== renderToken) return;\n\n      let w = src.w;\n      let h = src.h;\n\n      if(w > maxW){\n        h = Math.round(h * (maxW \/ w));\n        w = maxW;\n      }\n\n      const canvas = document.createElement(\"canvas\");\n      canvas.width = w;\n      canvas.height = h;\n      const ctx = canvas.getContext(\"2d\");\n\n      const bitmap = await createImageBitmap(src.file);\n      if (token !== renderToken) return;\n\n      const mime = getMime(src.file.type);\n      const canAlphaRound = (mime === \"image\/png\" || mime === \"image\/webp\") && r > 0;\n\n      ctx.clearRect(0, 0, w, h);\n\n      if (canAlphaRound) {\n        ctx.save();\n        roundedRectPath(ctx, 0, 0, w, h, r);\n        ctx.clip();\n        ctx.drawImage(bitmap, 0, 0, w, h);\n        ctx.restore();\n      } else {\n        ctx.drawImage(bitmap, 0, 0, w, h);\n      }\n\n      const blob = await new Promise(res => canvas.toBlob(res, mime, 0.95));\n      if (token !== renderToken) return;\n\n      const url = URL.createObjectURL(blob);\n\n      const ext = mime === \"image\/png\" ? \"png\"\n                : mime === \"image\/webp\" ? \"webp\"\n                : \"jpg\";\n\n      const baseName = src.file.name.replace(\/\\.[^\/.]+$\/, \"\");\n      const name = `resized_${baseName}.${ext}`;\n\n      outputs.push({ blob, url, name });\n\n      const wrap = document.createElement(\"div\");\n      wrap.className = \"tm-thumb\";\n\n      const im = document.createElement(\"img\");\n      im.src = url;\n      im.onclick = () => {\n        lightImg.src = url;\n        lightbox.style.display = \"flex\";\n      };\n\n      wrap.appendChild(im);\n      preview.appendChild(wrap);\n    }\n\n    if (token === renderToken) {\n      saveBtn.disabled = false;\n    }\n  }\n\n  saveBtn.onclick = () => {\n    outputs.forEach(o => {\n      const a = document.createElement(\"a\");\n      a.href = o.url;\n      a.download = o.name;\n      a.click();\n    });\n  };\n\n  closeBtn.onclick = () => {\n    lightbox.style.display = \"none\";\n  };\n\n  lightbox.addEventListener(\"click\", e => {\n    if(e.target === lightbox) lightbox.style.display = \"none\";\n  });\n\n  radiusVal.textContent = radiusInput.value;\n})();\n<\/script>\n<\/div>\n\n\n<p><script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-7399229634306040\" crossorigin=\"anonymous\"><\/script><!-- \u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u5e83\u544a\u306e\u30d7\u30ec\u30d3\u30e5\u30fc --><ins class=\"adsbygoogle\" style=\"display:block\" data-ad-client=\"ca-pub-7399229634306040\" data-ad-slot=\"1986945645\" data-ad-format=\"auto\" data-full-width-responsive=\"true\"><\/ins><script>     (adsbygoogle = window.adsbygoogle || []).push({});<\/script>\n<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u753b\u50cf\u30ea\u30b5\u30a4\u30ba\u30c4\u30fc\u30eb \u2460 \u753b\u50cf\u3092\u9078\u629e\uff08\u8907\u6570\u53ef\uff09 \u30d5\u30a1\u30a4\u30eb\u3092\u9078\u3076 \u2461 \u30b5\u30a4\u30ba\u30fb\u89d2\u4e38\u30fb\u4fdd\u5b58\u5f62\u5f0f \u6700\u5927\u6a2a\u5e45(px) \u89d2\u4e38(px) 0px \u4fdd\u5b58\u5f62\u5f0f \u5143\u306e\u5f62\u5f0f\u306e\u307e\u307eJPEGPNGWEBP \u203b\u89d2\u4e38\u306f PNG \/ WEBP \u306e\u3068\u304d\u306e\u307f &#8230; <\/p>\n","protected":false},"author":1,"featured_media":5515,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,6,8],"tags":[],"class_list":{"0":"post-5487","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-market-z","8":"category-tool","9":"category-image","10":"entry"},"_links":{"self":[{"href":"https:\/\/tomato-made.com\/study\/wp-json\/wp\/v2\/posts\/5487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tomato-made.com\/study\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tomato-made.com\/study\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tomato-made.com\/study\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tomato-made.com\/study\/wp-json\/wp\/v2\/comments?post=5487"}],"version-history":[{"count":24,"href":"https:\/\/tomato-made.com\/study\/wp-json\/wp\/v2\/posts\/5487\/revisions"}],"predecessor-version":[{"id":7533,"href":"https:\/\/tomato-made.com\/study\/wp-json\/wp\/v2\/posts\/5487\/revisions\/7533"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tomato-made.com\/study\/wp-json\/wp\/v2\/media\/5515"}],"wp:attachment":[{"href":"https:\/\/tomato-made.com\/study\/wp-json\/wp\/v2\/media?parent=5487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tomato-made.com\/study\/wp-json\/wp\/v2\/categories?post=5487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tomato-made.com\/study\/wp-json\/wp\/v2\/tags?post=5487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}