{"id":4807,"date":"2025-07-23T09:30:08","date_gmt":"2025-07-23T00:30:08","guid":{"rendered":"https:\/\/comcent.co.jp\/blog\/?p=4807"},"modified":"2025-03-19T13:56:24","modified_gmt":"2025-03-19T04:56:24","slug":"stable-diffusion-web-ui-%e7%94%a3%e7%94%bb%e5%83%8f%e3%81%ae-png-%e3%81%8b%e3%82%89-php-%e3%81%a7%e3%83%97%e3%83%ad%e3%83%b3%e3%83%97%e3%83%88%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e8%aa%ad%e3%81%bf","status":"publish","type":"post","link":"https:\/\/comcent.co.jp\/blog\/archives\/4807\/","title":{"rendered":"Stable Diffusion Web UI \u7523\u753b\u50cf\u306e png \u304b\u3089 PHP \u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u53d6\u308b(tEXt \u30c1\u30e3\u30f3\u30af\u306e\u8aad\u307f\u53d6\u308a)"},"content":{"rendered":"\n<p>Stable Diffusion \u3092\u52d5\u304b\u3059\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u3057\u3066\u4eca\u306a\u304a\u30c7\u30a3\u30d5\u30a1\u30af\u30c8\u30b9\u30bf\u30f3\u30c0\u30fc\u30c9\u3068\u547c\u3079\u308b Stable Diffusion Web UI \u3067\u3059\u304c\u3001\u751f\u6210\u3057\u305f png \u753b\u50cf\u3092\u300cPNG Info\u300d\u30bf\u30d6\u306b\u6295\u3052\u5165\u308c\u308b\u3068\u4f7f\u7528\u3057\u305f\u30d7\u30ed\u30f3\u30d7\u30c8\u3084\u4ed6\u306e\u8a2d\u5b9a\u304c\u95b2\u89a7\u3067\u304d\u307e\u3059\u3002<br>\u7279\u306b Stable Diffusion Web UI \u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3084\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u78ba\u8a8d\u3057\u305f\u308f\u3051\u3067\u306f\u306a\u3044\u306e\u3067\u3059\u304c\u3001\u306a\u3093\u3089\u304b\u306e\u5f62\u3067 png \u30d5\u30a1\u30a4\u30eb\u306e\u8868\u793a\u3068\u306f\u95a2\u4fc2\u306a\u3044\u30e1\u30bf\u30c7\u30fc\u30bf\u90e8\u5206\u306b\u60c5\u5831\u304c\u66f8\u304d\u8fbc\u307e\u308c\u3066\u3044\u308b\u306e\u3060\u308d\u3046\u3068\u601d\u3063\u3066\u8abf\u3079\u305f\u3089\u305d\u306e\u901a\u308a\u3067\u3057\u305f\u3002<br>\u306a\u3089\u3070 PHP \u3067\u8aad\u307f\u8fbc\u3081\u306c\u308f\u3051\u306f\u306a\u3044\u3060\u308d\u3046\u3068\u958b\u767a\u3092\u3057\u305f\u3089\u3001\u6848\u5916\u3059\u3093\u306a\u308a\u8aad\u307f\u8fbc\u3081\u305f\u306e\u3067\u3001png \u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u629c\u304d\u51fa\u3059\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<br>\u3061\u306a\u307f\u306b\u30e9\u30a4\u30d6\u30e9\u30ea\u306a\u3069\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002PHP: 8.2.0 \u3067\u691c\u8a3c\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline02 modMiddleHeading\">\u5b9f\u969b\u306e\u30b3\u30fc\u30c9<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"683\" loading=\"lazy\" src=\"https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0002-1024x683.png\" alt=\"\" class=\"wp-image-4947\" srcset=\"https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0002-1024x683.png 1024w, https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0002-300x200.png 300w, https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0002-768x512.png 768w, https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0002.png 1500w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u3044\u308f\u3086\u308b Controller \u90e8\u5206\u306a\u3069\u306f\u7701\u3044\u3066\u3001\u5b9f\u969b\u306b png \u753b\u50cf\u304b\u3089\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6587\u5b57\u5217 or \u914d\u5217\u306e\u5f62\u3067\u8fd4\u3059\u30af\u30e9\u30b9\u304c\u4e0b\u8a18\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted modBlobCode\">&lt;?php<br><br>namespace PngInfo;<br><br>class PngInfo<br>{<br><br>  \/**<br>   * \u6307\u5b9a\u3055\u308c\u305f png \u30d5\u30a1\u30a4\u30eb\u5185\u306b stable diffusion \u7528\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u3042\u308c\u3070\u305d\u308c\u3092\u8fd4\u3059<br>   * \u5b58\u5728\u3057\u306a\u3051\u308c\u3070 null \u3092\u8fd4\u3059<br>   * @param string $path<br>   * @return string|null<br>   *\/<br>  private function _getParametersString(string $path): ?string<br>  {<br>    \/\/\u305d\u3082\u305d\u3082\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306f null \u3092\u8fd4\u3059<br>    if ( ! is_file($path))<br>    {<br>      return null;<br>    }<br><br>    \/\/\u30d5\u30a1\u30a4\u30eb\u3092\u30d0\u30a4\u30ca\u30ea\u30e2\u30fc\u30c9\u304b\u3064\u3001\u30dd\u30a4\u30f3\u30bf\u3092\u5148\u982d\u306b\u7f6e\u3044\u3066\u8aad\u307f\u8fbc\u307f\u958b\u59cb<br>    $fp = fopen($path, 'rb');<br><br>    $chu = fread($fp, 8);<br><br>    \/* PNG\u30b7\u30b0\u30cd\u30c1\u30e3\u304c\u4e00\u81f4\u3059\u308b\u304b\u30c1\u30a7\u30c3\u30af *\/<br>    if($chu !== \"\\x89\\x50\\x4e\\x47\\x0d\\x0a\\x1a\\x0a\")<br>    {<br>      \/\/\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u308b<br>      fclose($fp);<br><br>      \/\/null \u3092\u8fd4\u3059<br>      return null;<br>    }<br><br>    \/\/\u30dd\u30a4\u30f3\u30bf\u304b\u3089 8 \u30d0\u30a4\u30c8\u3076\u3093\u306e\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3080<br>    \/\/\u30eb\u30fc\u30d7\u5185\u3067\u3082 fread \u3092\u884c\u3046\u306e\u3067\u3001\u6bce\u56de 8 \u30d3\u30c3\u30c8\u3065\u3064\u8aad\u3080\u308f\u3051\u3067\u306f\u306a\u3044<br>    while($chunkHeader = fread($fp, 8))<br>    {<br>      \/\/\u5148\u982d8\u30d0\u30a4\u30c8\u304b\u3089\u3001\u30c1\u30e3\u30f3\u30af\u30c7\u30fc\u30bf\u306e\u9577\u3055\u3068\u7a2e\u5225\u3092\u53d6\u5f97\u3059\u308b<br>      $chunk = unpack('Nsize\/a4type', $chunkHeader);<br><br>      \/\/\u30c1\u30e3\u30f3\u30af\u30c7\u30fc\u30bf\u672c\u4f53<br>      \/\/Note: \u30b5\u30a4\u30ba0\u306e\u5834\u5408\u3001fread\u95a2\u6570\u304c\u30a8\u30e9\u30fc\u3092\u51fa\u3059\u305f\u3081\u7a7a\u6587\u5b57\u3068\u3059\u308b<br>      $data = (0 &lt; $chunk['size']) ? fread($fp, $chunk['size']) : '';<br><br>      \/\/CRC \u306f\u7279\u306b\u4f7f\u7528\u3057\u306a\u3044\u304c\u3001\u6b21\u56de\u8aad\u307f\u8fbc\u307f\u5206\u307e\u3067\u30dd\u30a4\u30f3\u30bf\u3092\u305a\u3089\u3059<br>      fseek($fp, 4, SEEK_CUR);<br><br>      \/\/tEXt \u3092\u898b\u3064\u3051\u305f\u3089\u8fd4\u3059<br>      if($chunk['type'] === \"\\x74\\x45\\x58\\x74\" &amp;&amp; $data)<br>      {<br>        \/\/\u4e00\u65e6 hex \u5f62\u5f0f\u306b\u5909\u63db<br>        $hex = bin2hex($data);<br><br>        \/\/\u30bb\u30d1\u30ec\u30fc\u30bf\u3092\u63a2\u3059<br>        $separatorIndex = strpos($hex, '00');<br><br>        \/\/\u30bb\u30d1\u30ec\u30fc\u30bf\u304c\u7121\u3044<br>        if ($separatorIndex === false)<br>        {<br>          continue;<br>        }<br><br>        \/\/\u5148\u982d\u30d1\u30e9\u30e1\u30fc\u30bf\u304c 'parameter' \u3067\u306f\u306a\u3044<br>        if (substr($hex, 0, $separatorIndex) !== \"706172616d6574657273\")<br>        {<br>          continue;<br>        }<br><br>        \/\/\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u308b<br>        fclose($fp);<br><br>        \/\/\u30c7\u30fc\u30bf\u3092\u8fd4\u3059<br>        return hex2bin(substr($hex, $separatorIndex + 2));<br>      }<br>    }<br><br>    \/\/\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u308b<br>    fclose($fp);<br><br>    \/\/\u76ee\u5f53\u3066\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u7121\u3044\u306e\u3067 null \u3092\u8fd4\u3059<br>    return null;<br>  }<br><br>  \/**<br>   * $sting \u3092\u30ab\u30f3\u30de\u3001\u307e\u305f\u306f\u6539\u884c\u3067\u533a\u5207\u308b<br>   * \u7d50\u679c\u914d\u5217\u306e\u5024\u306f trim() \u3055\u308c\u305f\u3082\u306e\u3068\u306a\u308b<br>   * @param string $string<br>   * @return array<br>   *\/<br>  private function _separatePrompts(string $string): array<br>  {<br>    \/\/\u7d50\u679c\u914d\u5217<br>    $prompts = [];<br><br>    \/\/ \u4e00\u6642\u84c4\u7a4d\u7528\u6587\u5b57\u5217<br>    $temp = '';<br><br>    \/\/ \u30ab\u30f3\u30de\u3092\u533a\u5207\u308a\u3068\u8a8d\u8b58\u3057\u306a\u3044\u30d5\u30e9\u30b0<br>    $ignoreFlg = false;<br><br>    \/\/ \u6b21\u306e\u30eb\u30fc\u30d7\u3092\u5168\u3066\u56de\u3057\u304d\u308b\u305f\u3081\u4e00\u6587\u5b57\u4f59\u8a08\u306a\u30ab\u30f3\u30de\u3092\u8ffd\u52a0<br>    $string .= ',';<br><br>    \/\/ \u4e00\u6587\u5b57\u3065\u3064\u5207\u308a\u51fa\u3057\u3066\u30eb\u30fc\u30d7<br>    foreach (mb_str_split($string) as $char)<br>    {<br>      \/\/ &lt; \u3060\u3063\u305f\u3089\u4ee5\u964d &gt; \u304c\u78ba\u8a8d\u3055\u308c\u308b\u307e\u3067\u30ab\u30f3\u30de\u3092\u7121\u8996<br>      if ($char === '&lt;')<br>      {<br>        $ignoreFlg = true;<br>      }<br><br>      \/\/ &gt; \u3060\u3063\u305f\u3089\u4ee5\u964d &lt; \u306b\u3088\u308b\u30ab\u30f3\u30de\u7121\u8996\u3092\u89e3\u9664<br>      if ($char === '&gt;')<br>      {<br>        $ignoreFlg = false;<br>      }<br><br>      \/\/ \u30ab\u30f3\u30de\u7121\u8996\u4e2d\u3001\u3082\u3057\u304f\u306f\u30ab\u30f3\u30de\u3067\u306a\u3051\u308c\u3070 $temp \u306b\u6587\u5b57\u3092\u84c4\u7a4d<br>      if ($ignoreFlg || $char !== ',')<br>      {<br>        \/\/ \u8ffd\u52a0<br>        $temp .= $char;<br><br>        \/\/ \u6b21\u306e\u6587\u5b57\u3078<br>        continue;<br>      }<br><br>      \/\/ \u5909\u6570\u306e\u79fb\u3057\u66ff\u3048<br>      $value = $temp;<br><br>      \/\/ \u3053\u306e\u6642\u70b9\u3067\u84c4\u7a4d\u6587\u5b57\u5217\u3092\u30ea\u30bb\u30c3\u30c8<br>      $temp = '';<br><br>      \/\/ \u7d50\u679c\u304c\u7a7a\u767d\u306a\u3089\u4f55\u3082\u3057\u306a\u3044<br>      if ($value === '')<br>      {<br>        continue;<br>      }<br><br>      \/\/ \u7d50\u679c\u306b\u8ffd\u52a0<br>      $prompts[] = $value;<br>    }<br><br>    \/\/\u8fd4\u3059<br>    return $prompts;<br>  }<br><br>  \/**<br>   * \u629c\u304d\u51fa\u3057\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u6587\u5b57\u5217\u3092\u9023\u60f3\u914d\u5217\u306b\u5909\u63db\u3057\u3066\u8fd4\u3059<br>   * \u629c\u304d\u51fa\u3057\u306b\u5931\u6557\u3057\u305f\u5834\u5408\u306f null \u3092\u8fd4\u3059<br>   * @param string $string<br>   * @return array|null<br>   *\/<br>  private function _parseParameters(string $string): ?array<br>  {<br>    \/\/\u5b58\u5728\u3057\u306a\u3044<br>    if ( ! $string)<br>    {<br>      return null;<br>    }<br><br>    \/\/ $string \u306f '{\u30d7\u30ed\u30f3\u30d7\u30c8}\\nNegative prompt: {\u30cd\u30ac\u30c6\u30a3\u30d6\u30d7\u30ed\u30f3\u30d7\u30c8}\\n{\u305d\u306e\u307b\u304b\u306e\u30d1\u30e9\u30e1\u30fc\u30bf'}' \u3068\u3044\u3046\u69cb\u9020\u304c\u4e88\u60f3\u3055\u308c\u308b<br>    \/\/ \u624b\u59cb\u3081\u306b \\n \u3067\u5206\u5272\u3059\u308b<br>    $strings = explode(\"\\n\", $string);<br><br>    \/\/ \u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306f\u524d\u3082\u3063\u3066\u53d6\u308a\u51fa\u3057\u3066\u304a\u304f<br>    $positives = isset($strings[2]) ? $this-&gt;_separatePrompts($strings[0]) : [];<br>    $negatives = isset($strings[2]) ? $this-&gt;_separatePrompts($strings[1]) : [];<br><br>    \/\/ \u305d\u306e\u307b\u304b\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u90e8\u5206\u3092\u5b9a\u7fa9<br>    $parameters = $strings[2] ?? $string;<br><br>    \/\/ ([^:]+): ([^,]+)(, )? \u3067\u5206\u5272\u3057\u3001\u30ad\u30fc\u3068\u5024\u3092\u53d6\u5f97\u3059\u308b<br>    return preg_match_all('\/([^:]+): ([^,]+)(, )?\/', $parameters, $matches)<br>      ? compact('positives', 'negatives') + array_combine($matches[1], $matches[2])<br>      : compact('positives', 'negatives');<br>  }<br><br>  \/**<br>   * \u6307\u5b9a\u3055\u308c\u305f png \u30d5\u30a1\u30a4\u30eb\u5185\u306b stable diffusion \u7528\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u3042\u308c\u3070\u305d\u308c\u3092\u8fd4\u3059<br>   * \u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u5b58\u5728\u3057\u306a\u3051\u308c\u3070 null \u3092\u8fd4\u3059<br>   * @param string $path<br>   * @return string|null<br>   *\/<br>  public function getParametersString(string $path)<br>  {<br>    return $this-&gt;_getParametersString($path);<br>  }<br><br>  \/**<br>   * \u6307\u5b9a\u3055\u308c\u305f png \u30d5\u30a1\u30a4\u30eb\u5185\u306b stable diffusion \u7528\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u3042\u308c\u3070\u9023\u60f3\u914d\u5217\u306b\u3057\u3066\u8fd4\u3059<br>   * \u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u5b58\u5728\u3057\u306a\u3051\u308c\u3070 null \u3092\u8fd4\u3059<br>   * @param string $path<br>   * @return array|null<br>   *\/<br>  public function getParametersArray(string $path): ?array<br>  {<br>    \/\/\u6587\u5b57\u5217\u3092\u5f97\u308b<br>    $string = $this-&gt;_getParametersString($path);<br><br>    \/\/\u6587\u5b57\u5217\u306e\u53d6\u5f97\u306b\u5931\u6557<br>    if ( ! $string)<br>    {<br>      return null;<br>    }<br><br>    \/\/\u30d1\u30fc\u30b9<br>    return $this-&gt;_parseParameters($string);<br>  }<br><br>}<br><\/pre>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline02 modMiddleHeading\">png \u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u69cb\u9020<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"683\" loading=\"lazy\" src=\"https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0003-1024x683.png\" alt=\"\" class=\"wp-image-4948\" srcset=\"https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0003-1024x683.png 1024w, https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0003-300x200.png 300w, https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0003-768x512.png 768w, https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0003.png 1500w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u307e\u305a\u306f png \u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u304c\u3069\u306e\u3088\u3046\u306a\u69cb\u9020\u306b\u306a\u3063\u3066\u3044\u308b\u304b\u3092\u7406\u89e3\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<br>\u8a73\u3057\u304f\u306f\u4ee5\u4e0b\u306e\u8a18\u4e8b\u304c\u5927\u5909\u53c2\u8003\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p><a href=\"https:\/\/zenn.dev\/knowledgework\/articles\/read-png-file\">https:\/\/zenn.dev\/knowledgework\/articles\/read-png-file<\/a><\/p>\n\n\n\n<p>\u3053\u3053\u3067\u6700\u4f4e\u9650\u899a\u3048\u3066\u304a\u304d\u305f\u3044\u306e\u306f\u3001png \u30c7\u30fc\u30bf\u306f\u5148\u982d 8 byte \u3092\u9664\u304d\u3001\u305d\u308c\u4ee5\u964d\u306f\u3059\u3079\u3066\u300c\u30c1\u30e3\u30f3\u30af\u300d\u3068\u547c\u3070\u308c\u308b\u584a\u304c\u9023\u7d9a\u3057\u3066\u30c7\u30fc\u30bf\u3092\u5f62\u4f5c\u3063\u3066\u3044\u308b\u3068\u3044\u3046\u70b9\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u306e\u30c1\u30e3\u30f3\u30af\u306f\u3069\u3093\u306a\u30c1\u30e3\u30f3\u30af\u3067\u3042\u3063\u3066\u3082\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u69cb\u9020\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list pageSimpleList\">\n<li>Length: (4 bytes) Chunk Data \u306e\u30b5\u30a4\u30ba\u3092\u793a\u3059\u3002<\/li>\n\n\n\n<li>Chunk Type: (4 bytes)\u30c1\u30e3\u30f3\u30af\u306e\u7a2e\u985e\u3092\u793a\u3059\u3002<\/li>\n\n\n\n<li>Chunk Data: (\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u53ef\u5909) \u5b9f\u969b\u306e\u30c7\u30fc\u30bf\u3002 Length \u304c 0 \u306e\u5834\u5408\u3001\u3053\u306e\u9818\u57df\u306f\u5b58\u5728\u3057\u306a\u3044\u3002<\/li>\n\n\n\n<li>CRC: (4byte) \u30c7\u30fc\u30bf\u306e\u7834\u640d\u3084\u6539\u3056\u3093\u691c\u77e5\u7528\u30c7\u30fc\u30bf\u3002<\/li>\n<\/ul>\n\n\n\n<p>Chunk Data \u3060\u3051\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u304c\u53ef\u5909\u3067\u3059\u304c\u3001 Length \u306b\u3088\u3063\u3066\u30c1\u30e3\u30f3\u30af\u5168\u4f53\u306e\u30b5\u30a4\u30ba\u304c\u5206\u304b\u308b\u306e\u3067\u3001\u6b21\u306b\u7d9a\u304f\u30c1\u30e3\u30f3\u30af\u3068\u306e\u5883\u76ee\u304c\u4f55 Bytes \u76ee\u306a\u306e\u304b\u5224\u65ad\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>Chunk Type \u306b\u306f\u69d8\u3005\u306a\u3082\u306e\u304c\u3042\u308a\u3001\u4e88\u3081\u6c7a\u3081\u3089\u308c\u3066\u3044\u308b\u6a19\u6e96\u7684\u306a\u3082\u306e\u3068\u3001png \u4f5c\u8005\u304c\u81ea\u7531\u306b\u8a2d\u5b9a\u3057\u305f\u3082\u306e\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u4eca\u56de\u76ee\u7684\u3068\u3059\u308b Chunk Type \u306f <strong>tEX<\/strong>t \u3068\u3044\u3046 Chunk Type \u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"pageSimpleLink\"><a href=\"https:\/\/www.w3.org\/TR\/png\/#4Concepts.FormatTypes\">https:\/\/www.w3.org\/TR\/png\/#4Concepts.FormatTypes<\/a><\/p>\n\n\n\n<p>\u3061\u306a\u307f\u306b\u3001tEXt \u306e\u5148\u982d\u3068\u672b\u5c3e\u304c\u5c0f\u6587\u5b57\u306a\u306e\u306b\u306f\u660e\u78ba\u306a\u7406\u7531\u304c\u3042\u308a\u307e\u3059\u3002<br>Chunk Type \u306f\u5fc5\u305a\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8 4 \u6587\u5b57\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u5404\u6841\u306e\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u306b\u306f\u305d\u308c\u305e\u308c Chunk Type \u306e\u6027\u8cea\u3092\u8868\u3057\u3066\u3044\u307e\u3059\u3002<br>\u5148\u982d\u304c\u5927\u6587\u5b57\u306e\u5834\u5408\u306f png \u30c7\u30fc\u30bf\u306b\u5fc5\u9808\u306e Critical Chunk \u3068\u547c\u3070\u308c\u308b\u3082\u306e\u3067\u3001\u30d6\u30e9\u30a6\u30b6\u3092\u542b\u3080 png \u3092\u63cf\u753b\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c png \u3092\u8868\u793a\u3059\u308b\u969b\u306b\u53c2\u7167\u3059\u3079\u304d Chunk \u3068\u306a\u308a\u307e\u3059\u3002\u4e00\u65b9\u3001 tEXt \u306e\u3088\u3046\u306a\u5148\u982d\u304c\u5c0f\u6587\u5b57\u306e Chunk \u306f\u76f4\u63a5\u63cf\u753b\u306b\u306f\u5fc5\u8981\u306e\u306a\u3044\u3001\u88dc\u52a9\u7684\u306a Chunk \u3092\u793a\u3057\u307e\u3059\u3002<br>\u4e00\u65b9\u3001\u672b\u5c3e\u304c\u5927\u6587\u5b57\u306e\u5834\u5408\u306f png \u30c7\u30fc\u30bf\u3092\u8907\u88fd\u30fb\u7de8\u96c6\u306a\u3069\u3059\u308b\u969b\u3001\u5358\u7d14\u306b\u30b3\u30d4\u30fc\u3059\u308b\u3068 png \u30c7\u30fc\u30bf\u8868\u793a\u306b\u4e0d\u90fd\u5408\u304c\u751f\u3058\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002\u4f8b\u3068\u3057\u3066cHRM \u306f\u8272\u306e\u539f\u8272\u3068\u767d\u8272\u70b9\u306e\u7279\u6027\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306e\u30c1\u30e3\u30f3\u30af\u3067\u3059\u304c\u3001\u753b\u50cf\u3092\u7de8\u96c6\u3057\u305f\u969b cHRM \u3092\u5143\u306e\u307e\u307e\u7528\u3044\u308b\u3068\u8272\u30ba\u30ec\u304c\u767a\u751f\u3057\u305f\u308a\u3057\u307e\u3059\u3002\u4e00\u65b9 tEXt \u30c1\u30e3\u30f3\u30af\u306a\u3069\u672b\u5c3e\u304c\u5c0f\u6587\u5b57\u306e\u5834\u5408\u3001\u5358\u7d14\u306b\u30c1\u30e3\u30f3\u30af\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3082\u753b\u50cf\u305d\u306e\u3082\u306e\u306b\u60aa\u5f71\u97ff\u304c\u306a\u3044\u305f\u3081\u3001\u5358\u7d14\u306a\u30b3\u30d4\u30fc\u304c\u5b89\u5168\u3068\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"pageSimpleLink\"><a href=\"https:\/\/www.w3.org\/TR\/png\/#5Chunk-naming-conventions\">https:\/\/www.w3.org\/TR\/png\/#5Chunk-naming-conventions<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline02 modMiddleHeading\">\u5b9f\u969b\u306b PHP \u3067 tEXt \u30c1\u30e3\u30f3\u30af\u3092\u8aad\u3093\u3067\u307f\u308b<\/h4>\n\n\n\n<p>png \u30c7\u30fc\u30bf\u304b\u3089\u30c7\u30fc\u30bf\u3092\u629c\u304d\u51fa\u3057\u3066\u3044\u308b\u306e\u306f\u4ee5\u4e0b\u306e\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u3002 $path \u5f15\u6570\u306b\u306f \/var\/www\/html\/hoge\/fuga\/piyo.png \u306e\u3088\u3046\u306a\u30d1\u30b9\u3092\u53d7\u3051\u53d6\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted modBlobCode\">  private function _getParametersString(string $path): ?string<br>  {<br>    \/\/\u305d\u3082\u305d\u3082\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306f null \u3092\u8fd4\u3059<br>    if ( ! is_file($path))<br>    {<br>      return null;<br>    }<br><br>    \/\/\u30d5\u30a1\u30a4\u30eb\u3092\u30d0\u30a4\u30ca\u30ea\u30e2\u30fc\u30c9\u304b\u3064\u3001\u30dd\u30a4\u30f3\u30bf\u3092\u5148\u982d\u306b\u7f6e\u3044\u3066\u8aad\u307f\u8fbc\u307f\u958b\u59cb<br>    $fp = fopen($path, 'rb');<br><br>    $chu = fread($fp, 8);<br><br>    \/* PNG\u30b7\u30b0\u30cd\u30c1\u30e3\u304c\u4e00\u81f4\u3059\u308b\u304b\u30c1\u30a7\u30c3\u30af *\/<br>    if($chu !== \"\\x89\\x50\\x4e\\x47\\x0d\\x0a\\x1a\\x0a\")<br>    {<br>      \/\/\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u308b<br>      fclose($fp);<br><br>      \/\/null \u3092\u8fd4\u3059<br>      return null;<br>    }<br><br>    \/\/\u30dd\u30a4\u30f3\u30bf\u304b\u3089 8 \u30d0\u30a4\u30c8\u3076\u3093\u306e\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3080<br>    \/\/\u30eb\u30fc\u30d7\u5185\u3067\u3082 fread \u3092\u884c\u3046\u306e\u3067\u3001\u6bce\u56de 8 \u30d3\u30c3\u30c8\u3065\u3064\u8aad\u3080\u308f\u3051\u3067\u306f\u306a\u3044<br>    while($chunkHeader = fread($fp, 8))<br>    {<br>      \/\/\u5148\u982d8\u30d0\u30a4\u30c8\u304b\u3089\u3001\u30c1\u30e3\u30f3\u30af\u30c7\u30fc\u30bf\u306e\u9577\u3055\u3068\u7a2e\u5225\u3092\u53d6\u5f97\u3059\u308b<br>      $chunk = unpack('Nsize\/a4type', $chunkHeader);<br><br>      \/\/\u30c1\u30e3\u30f3\u30af\u30c7\u30fc\u30bf\u672c\u4f53<br>      \/\/Note: \u30b5\u30a4\u30ba0\u306e\u5834\u5408\u3001fread\u95a2\u6570\u304c\u30a8\u30e9\u30fc\u3092\u51fa\u3059\u305f\u3081\u7a7a\u6587\u5b57\u3068\u3059\u308b<br>      $data = (0 &lt; $chunk['size']) ? fread($fp, $chunk['size']) : '';<br><br>      \/\/CRC \u306f\u7279\u306b\u4f7f\u7528\u3057\u306a\u3044\u304c\u3001\u6b21\u56de\u8aad\u307f\u8fbc\u307f\u5206\u307e\u3067\u30dd\u30a4\u30f3\u30bf\u3092\u305a\u3089\u3059<br>      fseek($fp, 4, SEEK_CUR);<br><br>      \/\/tEXt \u3092\u898b\u3064\u3051\u305f\u3089\u8fd4\u3059<br>      if($chunk['type'] === \"\\x74\\x45\\x58\\x74\" &amp;&amp; $data)<br>      {<br>        \/\/\u4e00\u65e6 hex \u5f62\u5f0f\u306b\u5909\u63db<br>        $hex = bin2hex($data);<br><br>        \/\/\u30bb\u30d1\u30ec\u30fc\u30bf\u3092\u63a2\u3059<br>        $separatorIndex = strpos($hex, '00');<br><br>        \/\/\u30bb\u30d1\u30ec\u30fc\u30bf\u304c\u7121\u3044<br>        if ($separatorIndex === false)<br>        {<br>          continue;<br>        }<br><br>        \/\/\u5148\u982d\u30d1\u30e9\u30e1\u30fc\u30bf\u304c 'parameter' \u3067\u306f\u306a\u3044<br>        if (substr($hex, 0, $separatorIndex) !== \"706172616d6574657273\")<br>        {<br>          continue;<br>        }<br><br>        \/\/\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u308b<br>        fclose($fp);<br><br>        \/\/\u30c7\u30fc\u30bf\u3092\u8fd4\u3059<br>        return hex2bin(substr($hex, $separatorIndex + 2));<br>      }<br>    }<br><br>    \/\/\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u308b<br>    fclose($fp);<br><br>    \/\/\u76ee\u5f53\u3066\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u7121\u3044\u306e\u3067 null \u3092\u8fd4\u3059<br>    return null;<br>  }<\/pre>\n\n\n\n<h5 class=\"wp-block-comcent-blog-miniheadline01 modSubheading\">\u5148\u982d 8 bytes \u304b\u3089\u3001\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u672c\u5f53\u306b png \u30c7\u30fc\u30bf\u304b\u5224\u5b9a\u3059\u308b<\/h5>\n\n\n\n<p>\u307e\u305a\u3001\u6271\u304a\u3046\u3068\u3057\u3066\u3044\u308b\u30d5\u30a1\u30a4\u30eb\u304c\u672c\u5f53\u306b png \u30d5\u30a1\u30a4\u30eb\u306a\u306e\u304b\u3092\u8abf\u3079\u3066\u3044\u308b\u306e\u304c\u4ee5\u4e0b\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted modBlobCode\">    \/\/\u30d5\u30a1\u30a4\u30eb\u3092\u30d0\u30a4\u30ca\u30ea\u30e2\u30fc\u30c9\u304b\u3064\u3001\u30dd\u30a4\u30f3\u30bf\u3092\u5148\u982d\u306b\u7f6e\u3044\u3066\u8aad\u307f\u8fbc\u307f\u958b\u59cb<br>    $fp = fopen($path, 'rb');<br><br>    $chu = fread($fp, 8);<br><br>    \/* PNG\u30b7\u30b0\u30cd\u30c1\u30e3\u304c\u4e00\u81f4\u3059\u308b\u304b\u30c1\u30a7\u30c3\u30af *\/<br>    if($chu !== \"\\x89\\x50\\x4e\\x47\\x0d\\x0a\\x1a\\x0a\")<br>    {<br>      \/\/\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u308b<br>      fclose($fp);<br><br>      \/\/null \u3092\u8fd4\u3059<br>      return null;<br>    }<\/pre>\n\n\n\n<p>png \u30d5\u30a1\u30a4\u30eb\u306e\u5148\u982d\u306b\u306f\u56fa\u5b9a\u3067\u3000\"\\x89\\x50\\x4e\\x47\\x0d\\x0a\\x1a\\x0a\" \u3068\u3044\u3046\u30c7\u30fc\u30bf\u304c\u5165\u3063\u3066\u3044\u307e\u3059\u3002 HTML \u306e doctype \u5ba3\u8a00\u306e\u3088\u3046\u306a\u3082\u306e\u3067\u3059\u306d\u3002\u3053\u308c\u304c\u4e00\u81f4\u3057\u3066\u3044\u306a\u3051\u308c\u3070\u304a\u305d\u3089\u304f png \u30c7\u30fc\u30bf\u3067\u306a\u3044\u306e\u3067\u5f3e\u3044\u3066\u3057\u307e\u3044\u307e\u3059\u3002\u5148\u8ff0\u3057\u305f\u30c1\u30e3\u30f3\u30af\u30c7\u30fc\u30bf\u3067\u306f\u306a\u3044\u5148\u982d\u306e 8 bytes \u304c\u3053\u308c\u306b\u5f53\u305f\u308a\u307e\u3059\u3002<br>\u3061\u306a\u307f\u306b\u3053\u306e\u8868\u793a\u5f62\u5f0f\u306f16\u9032\u6570\u30a8\u30b9\u30b1\u30fc\u30d7\u30b7\u30fc\u30b1\u30f3\u30b9\u3068\u547c\u3070\u308c\u308b\u3001\u7279\u306b\u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u3092\u5bfe\u8c61\u306b\u6271\u3046\u969b\u306e\u8868\u8a18\u65b9\u6cd5\u3067\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-comcent-blog-miniheadline01 modSubheading\">\u30c1\u30e3\u30f3\u30af\u306e Lnegth \u3068 Chunk Type \u3092\u5207\u308a\u53d6\u308b<\/h5>\n\n\n\n<p>\u3053\u306e 8 bytes \u3076\u3093\u3092\u8aad\u307f\u98db\u3070\u3057\u3066\u6700\u521d\u306e\u30c1\u30e3\u30f3\u30af\u5148\u982d\u307e\u3067\u8aad\u307f\u8fbc\u307f\u4f4d\u7f6e\u3092\u79fb\u52d5\u3057\u307e\u3059\u3002<br>\u305d\u3053\u304b\u3089\u5148\u306f\u4ee5\u4e0b\u306e\u30eb\u30fc\u30d7\u3067\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>1. \u30c1\u30e3\u30f3\u30af\u306e\u5148\u982d\u4f4d\u7f6e\u304b\u3089 8 bytes \u3076\u3093\u3092\u8aad\u307f\u8fbc\u3080\u3002\u8aad\u307f\u8fbc\u307f\u4f4d\u7f6e\u3082\u3053\u306e\u3068\u304d 8 bytes \u3076\u3093\u79fb\u52d5\u3059\u308b\u3002<\/li>\n\n\n\n<li>2. \u5148\u982d\u304b\u3089 8 bytes \u306f <strong>Length<\/strong> (4 bytes)\u3068 <strong>Chunk Type<\/strong> (4bytes) \u306a\u306e\u3067\u3001\u5f8c\u534a\u306e 4 bytes \u90e8\u5206\u304c <strong>tEX<\/strong>t \u304b\u78ba\u8a8d\u3059\u308b\u3002<\/li>\n\n\n\n<li>3. \u5f8c\u534a 4 bytes \u304c <strong>tEX<\/strong>t \u3060\u3063\u305f\u5834\u5408\u3001\u73fe\u5728\u306e\u8aad\u307f\u8fbc\u307f\u4f4d\u7f6e\u304b\u3089 <strong>Length<\/strong> \u304c\u793a\u3059 bytes \u3076\u3093\u304c Chunk Data \u306a\u306e\u3067\u3001\u3053\u306e\u90e8\u5206\u306e\u307f\u629c\u304d\u51fa\u3057\u3066\u51e6\u7406\u3059\u308b\u3002<\/li>\n\n\n\n<li>4. \u5f8c\u534a 4 bytes \u304c <strong>tEX<\/strong>t \u3067\u306f\u306a\u304b\u3063\u305f\u5834\u5408\u3001\u305d\u306e\u30c1\u30e3\u30f3\u30af\u306f\u76ee\u7684\u306e\u30c1\u30e3\u30f3\u30af\u3067\u306f\u306a\u3044\u305f\u3081\u6b21\u306e\u30c1\u30e3\u30f3\u30af\u5148\u982d\u306b\u8aad\u307f\u8fbc\u307f\u4f4d\u7f6e\u3092\u79fb\u52d5\u3055\u305b\u308b\u3002 <strong>Length<\/strong> \u304c\u793a\u3059 Chunk Data \u3076\u3093\u306e bytes \u6570\u3068\u3001 <strong>CRC<\/strong> \u306e 4 bytes \u3092\u8aad\u307f\u98db\u3070\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u4ee5\u4e0b\u304c Length \u3068 Chunk Type \u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u308b\u90e8\u5206\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted modBlobCode\">\/\/\u30dd\u30a4\u30f3\u30bf\u304b\u3089 8 \u30d0\u30a4\u30c8\u3076\u3093\u306e\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3080<br>\/\/\u30eb\u30fc\u30d7\u5185\u3067\u3082 fread \u3092\u884c\u3046\u306e\u3067\u3001\u6bce\u56de 8 \u30d3\u30c3\u30c8\u3065\u3064\u8aad\u3080\u308f\u3051\u3067\u306f\u306a\u3044<br>while($chunkHeader = fread($fp, 8))<\/pre>\n\n\n\n<p>fread \u95a2\u6570\u306f\u4eba\u9593\u304c\u672c\u3092\u8aad\u3080\u3068\u304d\u3068\u540c\u3058\u304f\u3001\u6307\u5b9a\u30b5\u30a4\u30ba\u307e\u3067\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3080\u3068\u8aad\u307f\u9032\u3081\u305f\u4f4d\u7f6e\u3092\u4fdd\u6301\u3057\u3066\u304f\u308c\u3066\u304a\u308a\u3001\u6b21\u56de freed \u95a2\u6570\u3067\u8aad\u307f\u8fbc\u307f\u3092\u518d\u958b\u3057\u305f\u969b\u306f\u305d\u306e\u4f4d\u7f6e\u304b\u3089\u8aad\u307f\u59cb\u3081\u307e\u3059\u3002<br>\u3057\u305f\u304c\u3063\u3066\u3053\u306e while \u30d6\u30ed\u30c3\u30af\u306e\u5148\u982d\u306b\u81f3\u3063\u305f\u6642\u70b9\u3067\u3001\u8aad\u307f\u8fbc\u307f\u4f4d\u7f6e\u306f Length \u3068 Chunk Type \u3092\u8aad\u307f\u98db\u3070\u3057\u3066  Chunk Data \u306e\u5148\u982d\u90e8\u5206\u306b\u6765\u3066\u3044\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u30c1\u30e3\u30f3\u30af\u306b\u3088\u3063\u3066\u306f Chunk Data \u304c\u5b58\u5728\u3057\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u305d\u306e\u5834\u5408\u306e\u8aad\u307f\u8fbc\u307f\u4f4d\u7f6e\u306f CRC \u306e\u5148\u982d\u90e8\u5206\u3067\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-comcent-blog-miniheadline01 modSubheading\">\u30c1\u30e3\u30f3\u30af\u306e Lnegth \u3068 Chunk Type \u3092\u5c55\u958b\u3059\u308b<\/h5>\n\n\n\n<p>\u7d9a\u3044\u3066\u3001while \u6587\u306e\u4e2d\u3067\u53d6\u5f97\u3057\u305f 8 bytes \u3076\u3093\u306e\u60c5\u5831\u3092\u89e3\u6790\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted modBlobCode\">\/\/\u5148\u982d8\u30d0\u30a4\u30c8\u304b\u3089\u3001\u30c1\u30e3\u30f3\u30af\u30c7\u30fc\u30bf\u306e\u9577\u3055\u3068\u7a2e\u5225\u3092\u53d6\u5f97\u3059\u308b<br>$chunk = unpack('Nsize\/a4type', $chunkHeader);<\/pre>\n\n\n\n<p>\u3053\u3053\u3067 unpack \u3068\u3044\u3046\u95a2\u6570\u3092\u7528\u3044\u308b\u306e\u3067\u3059\u304c\u3001\u3053\u306e unpuk \u306f\u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u3092 PHP \u3067\u6271\u3044\u3084\u3059\u3044\u9023\u60f3\u914d\u5217\u306b\u5c55\u958b\u3057\u3066\u304f\u308c\u308b\u95a2\u6570\u3067\u3059\u3002\u5bfe\u3068\u306a\u308b pack \u3068\u3044\u3046\u95a2\u6570\u306f\u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u3092\u4f5c\u6210\u3059\u308b\u3082\u306e\u3067\u3059\u304c\u3001 pack \u3068 unpack \u304c\u7b2c\u4e00\u5f15\u6570\u306b\u3068\u308b\u300c\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u300d\u90e8\u5206\u306f\u72ec\u7279\u306e\u6307\u5b9a\u3092\u3057\u307e\u3059\u3002 date \u95a2\u6570\u3067 <strong>Y<\/strong> \u3084 <strong>m<\/strong> \u3001 <strong>d<\/strong> \u304c\u7279\u5225\u306a\u66f8\u5f0f\u6587\u5b57\u3068\u3057\u3066\u89e3\u3055\u308c\u3001\u305d\u308c\u305e\u308c\u5e74\u6708\u65e5\u3068\u3057\u3066\u5c55\u958b\u3055\u308c\u308b\u306e\u3068\u4f3c\u3066\u3044\u308b\u3067\u3057\u3087\u3046\u304b\u3002<br>\u3055\u3089\u306b\u72ec\u7279\u306a\u306e\u304c\u3001\u305d\u308c\u3089\u66f8\u5f0f\u6587\u5b57\u306b\u7d9a\u304f\u6587\u5b57\u5217\u306f\u5c55\u958b\u5f8c\u306e\u9023\u60f3\u914d\u5217\u306b\u304a\u3051\u308b\u6dfb\u3048\u5b57\u3068\u3057\u3066\u7528\u3044\u3089\u308c\u308b\u70b9\u3068\u3001 <strong>\/<\/strong> \u3067\u5c55\u958b\u5f8c\u306e\u30c7\u30fc\u30bf\u3092\u533a\u5207\u308b\u70b9\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u66f8\u5f0f\u6587\u5b57\u306e\u4e00\u89a7\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><a href=\"https:\/\/www.php.net\/manual\/ja\/function.pack.php\">https:\/\/www.php.net\/manual\/ja\/function.pack.php<\/a><\/p>\n\n\n\n<p>\u4eca\u56de\u306e\u4f8b\u3067\u306f <strong>'Nsize\/a4type'<\/strong> \u3068\u3044\u3046\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u307e\u305a\u30b9\u30e9\u30c3\u30b7\u30e5\u306b\u3088\u3063\u3066\u30c7\u30fc\u30bf\u3092 <strong>Nsize<\/strong> \u3068 <strong>a4type<\/strong> \u3068\u3044\u3046\u4e8c\u3064\u306b\u533a\u5207\u3063\u3066\u89e3\u91c8\u3057\u305f\u3044\u3068\u3044\u3046\u610f\u5473\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>Nsize<\/strong> \u3067\u306f\u3001\u307e\u305a\u6700\u521d\u306e <strong>N<\/strong> \u304c\u66f8\u5f0f\u6587\u5b57\u3068\u3057\u3066\u89e3\u91c8\u3055\u308c\u307e\u3059\u3002<strong>N<\/strong> \u306e\u610f\u5473\u306f<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"modBlockquote\">unsigned long (\u5e38\u306b 32 \u30d3\u30c3\u30c8\u3001\u30d3\u30c3\u30b0\u30a8\u30f3\u30c7\u30a3\u30a2\u30f3\u30d0\u30a4\u30c8\u30aa\u30fc\u30c0\u30fc)<\/p>\n<\/blockquote>\n\n\n\n<p>\u3068\u3044\u3046\u3082\u306e\u3067\u3001\u3064\u307e\u308a 32 \u30d3\u30c3\u30c8\u306e int \u578b\u30c7\u30fc\u30bf(\u6570\u5024)\u306e\u3053\u3068\u3067\u3059\u3002<br><strong>N<\/strong> \u306f\u56fa\u5b9a\u3067 32 \u30d3\u30c3\u30c8\u3068\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u4ee5\u964d\u306e\u6587\u5b57\u5217\u306f\u66f8\u5f0f\u6587\u5b57\u3068\u3057\u3066\u89e3\u91c8\u3055\u308c\u305a\u3001\u7d9a\u304f <strong>size<\/strong> \u304c\u5c55\u958b\u5f8c\u306e\u9023\u60f3\u914d\u5217\u306b\u304a\u3051\u308b\u6dfb\u5b57\u3068\u3057\u3066\u7528\u3044\u3089\u308c\u307e\u3059\u3002<br>32 \u30d3\u30c3\u30c8\u3068\u306f\u3059\u306a\u308f\u3061 8 bytes \u306a\u306e\u3067\u3001\u5148\u8ff0\u3057\u305f\u30c1\u30e3\u30f3\u30af\u69cb\u9020\u306b\u304a\u3051\u308b 4 bytes \u306e <strong>Length<\/strong> \u90e8\u5206\u306b\u3042\u305f\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u5148\u982d\u304b\u3089 8 bytes \u3076\u3093\u8aad\u307f\u8fbc\u3093\u3060\u5f8c\u3001\u6b8b\u308a\u306e\u90e8\u5206\u306f <strong>a4type<\/strong> \u306b\u3088\u3063\u3066\u5c55\u958b\u3055\u308c\u307e\u3059\u3002<br>\u5148\u982d\u306e <strong>a<\/strong> \u304c\u66f8\u5f0f\u6587\u5b57\u3068\u3057\u3066\u89e3\u91c8\u3055\u308c\u307e\u3059\u304c\u3001 <strong>a<\/strong> \u306e\u5b9a\u7fa9\u306f\u4ee5\u4e0b\u3067\u3059\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"modBlockquote\">NUL \u3067\u57cb\u3081\u305f\u6587\u5b57\u5217<\/p>\n<\/blockquote>\n\n\n\n<p>\u3053\u308c\u3060\u3051\u3067\u306f\u4f55\u306e\u3053\u3068\u304b\u5206\u304b\u308a\u3065\u3089\u3044\u3067\u3059\u304c\u3001\u3088\u3046\u306f\u6570\u5024(int)\u3084\u8ad6\u7406\u5024(bool)\u3067\u306f\u306a\u304f\u6587\u5b57\u5217\u3092\u8aad\u307f\u53d6\u308b\u5834\u5408\u306b\u4f7f\u7528\u3055\u308c\u308b\u66f8\u5f0f\u6587\u5b57\u3067\u3059\u3002\u3088\u308a\u5177\u4f53\u7684\u306b\u8a00\u3046\u3068\u8aad\u307f\u53d6\u308a\u5bfe\u8c61\u306e\u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u4e2d\u306b NUL \u6587\u5b57(0x00)\u304c\u542b\u307e\u308c\u3066\u3044\u3066\u3082\u9014\u5207\u308c\u305a\u306b\u6587\u5b57\u5217\u3092\u8aad\u307f\u8fbc\u3093\u3067\u304f\u308c\u307e\u3059\u3002<br>\u5bfe\u6bd4\u3068\u3057\u3066\u3001\u4f8b\u3048\u3070 <strong>a<\/strong> \u3067\u306f\u306a\u304f <strong>z<\/strong> \u3092\u7528\u3044\u308b\u3068\u3001\u8aad\u307f\u8fbc\u307f\u7bc4\u56f2\u3068\u306a\u308b\u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u306e\u9014\u4e2d\u306b NUL \u6587\u5b57\u304c\u3042\u308b\u3068\u3001\u305d\u308c\u4ee5\u964d\u3092\u7121\u8996\u3057\u3066\u53d6\u5f97\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>a<\/strong> \u306b\u7d9a\u304f <strong>4<\/strong> \u306f\u3069\u306e\u76f4\u524d\u306e\u66f8\u5f0f\u6587\u5b57\u306b\u3088\u308b\u8aad\u307f\u53d6\u308a\u3092\u4f55\u56de\u7e70\u308a\u8fd4\u3059\u304b\u306e\u6307\u5b9a\u3068\u306a\u308a\u307e\u3059\u3002 <strong>N<\/strong> \u306e\u5834\u5408\u306f\u56fa\u5b9a\u3067 32 \u30d3\u30c3\u30c8\u306a\u306e\u3067\u3053\u306e\u6307\u5b9a\u304c\u4e0d\u5fc5\u8981\u3060\u3063\u305f\u306e\u3067\u3059\u304c\u3001\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8 4 \u6587\u5b57\u3076\u3093\u3092\u8aad\u307f\u53d6\u308a\u305f\u3044\u306e\u3067 4 \u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u3053\u307e\u3067\u3067\u8aad\u307f\u53d6\u308b\u30c7\u30fc\u30bf\u578b\u3068\u7bc4\u56f2\u304c\u660e\u78ba\u306b\u306a\u3063\u305f\u306e\u3067\u3001\u7d9a\u304f <strong>type<\/strong> \u90e8\u5206\u306f\u6dfb\u5b57\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u90e8\u5206\u304c\u30c1\u30e3\u30f3\u30af\u69cb\u9020\u306b\u304a\u3051\u308b 4 bytes \u306e <strong>Chunk Type<\/strong> \u90e8\u5206\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u7d50\u679c\u7684\u306b\u3001<\/p>\n\n\n\n<pre class=\"wp-block-preformatted modBlobCode\">['size' =&gt; 99999, 'type' =&gt; \"\\x74\\x45\\x58\\x74\"]<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><\/p>\n<\/blockquote>\n<\/blockquote>\n<\/blockquote>\n\n\n\n<p>\u306e\u3088\u3046\u306a\u9023\u60f3\u914d\u5217\u304c\u5f97\u3089\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-comcent-blog-miniheadline01 modSubheading\">Chunk Data \u3092\u8aad\u307f\u53d6\u308b<\/h5>\n\n\n\n<p>\u4e00\u65e6 Length \u3068 Chunk Type \u3092\u4fdd\u6301\u3057\u7d42\u3048\u305f\u3089\u3001\u4eca\u5ea6\u306f Chunk Data \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002\u8aad\u307f\u8fbc\u3080\u3079\u304d\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u3067\u3042\u308b Length \u306f unpack \u95a2\u6570\u306b\u3088\u3063\u3066 $chunk \u5909\u6570\u3078\u683c\u7d0d\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>Length \u304c 0 \u306e\u5834\u5408\u306f Chunk Data \u305d\u306e\u3082\u306e\u304c\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u3001\u8aad\u307f\u8fbc\u307f\u3092\u884c\u308f\u305a\u7a7a\u6587\u5b57\u3068\u3057\u3066\u4fdd\u6301\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted modBlobCode\">\/\/\u30c1\u30e3\u30f3\u30af\u30c7\u30fc\u30bf\u672c\u4f53\n\/\/Note: \u30b5\u30a4\u30ba0\u306e\u5834\u5408\u3001fread\u95a2\u6570\u304c\u30a8\u30e9\u30fc\u3092\u51fa\u3059\u305f\u3081\u7a7a\u6587\u5b57\u3068\u3059\u308b\n$data = (0 &lt; $chunk['size']) ? fread($fp, $chunk['size']) : '';<\/pre>\n\n\n\n<p>\u4e0a\u8a18\u30b3\u30fc\u30c9\u3067\u306f\u4e09\u9805\u6f14\u7b97\u5b50\u306b\u3088\u308a Length \u304c 0 \u3060\u3063\u305f\u5834\u5408\u306b\u5bfe\u5fdc\u3057\u305f\u6761\u4ef6\u5206\u5c90\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059\u304c\u3001 freed \u95a2\u6570\u304c\u8aad\u307f\u8fbc\u307f\u4f4d\u7f6e\u3092\u79fb\u52d5\u3059\u308b\u6027\u8cea\u3092\u5229\u7528\u3057\u3001 Chunk Data \u304c\u3042\u308d\u3046\u304c\u306a\u304b\u308d\u3046\u304c\u3001\u8aad\u307f\u8fbc\u307f\u4f4d\u7f6e\u304c CRC \u306e\u624b\u524d\u306b\u306a\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-comcent-blog-miniheadline01 modSubheading\">CRC \u3092\u8aad\u307f\u98db\u3070\u3057\u3001\u8aad\u307f\u8fbc\u307f\u4f4d\u7f6e\u3092\u6b21\u56de\u306e\u30c1\u30e3\u30f3\u30af\u5148\u982d\u306b\u79fb\u52d5\u3059\u308b<\/h5>\n\n\n\n<p>CRC \u306f\u30c7\u30fc\u30bf\u304c\u7834\u640d\u30fb\u6539\u3056\u3093\u3055\u308c\u3066\u3044\u306a\u3044\u304b\u8abf\u3079\u308b\u305f\u3081\u306e\u9818\u57df\u3067\u3059\u304c\u3001\u4eca\u56de\u306f\u7279\u306b\u4f7f\u7528\u3057\u307e\u305b\u3093\u3002\u9818\u57df\u306e\u9577\u3055\u304c\u56fa\u5b9a\u3067 4 bytes \u306a\u306e\u3067\u3001\u6b21\u306e\u30c1\u30e3\u30f3\u30af\u5148\u982d\u307e\u3067\u8aad\u307f\u98db\u3070\u3059\u305f\u3081\u306b fseek \u95a2\u6570\u3092\u7528\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted modBlobCode\">\/\/CRC \u306f\u7279\u306b\u4f7f\u7528\u3057\u306a\u3044\u304c\u3001\u6b21\u56de\u8aad\u307f\u8fbc\u307f\u5206\u307e\u3067\u30dd\u30a4\u30f3\u30bf\u3092\u305a\u3089\u3059<br>fseek($fp, 4, SEEK_CUR);<\/pre>\n\n\n\n<p>\u3053\u308c\u306b\u3088\u308a\u3001\u6b21\u306e while \u30eb\u30fc\u30d7\u3067\u6b21\u306e\u30c1\u30e3\u30f3\u30af\u5148\u982d\u304b\u3089\u51e6\u7406\u3092\u89e3\u6790\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-comcent-blog-miniheadline01 modSubheading\">Chunk Type \u304c tEXt \u30c1\u30e3\u30f3\u30af\u304b\u8abf\u3079\u308b<\/h5>\n\n\n\n<p>\u3053\u306e\u6642\u70b9\u3067\u6b21\u306e while \u30eb\u30fc\u30d7\u306b\u51e6\u7406\u304c\u79fb\u52d5\u3057\u3066\u3082\u6b21\u306e\u30c1\u30e3\u30f3\u30af\u304c\u8abf\u67fb\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u3067\u3001\u73fe\u5728\u8abf\u67fb\u3057\u3066\u3044\u308b\u30c1\u30e3\u30f3\u30af\u304c tEXt \u30c1\u30e3\u30f3\u30af\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\u3057\u307e\u3059\u3002 unpack \u95a2\u6570\u306b\u3088\u3063\u3066\u5f97\u3089\u308c\u305f Chunk Type \u3092\u6bd4\u8f03\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted modBlobCode\">if($chunk['type'] === \"\\x74\\x45\\x58\\x74\" &amp;&amp; $data)<\/pre>\n\n\n\n<p><strong>\"\\x74\\x45\\x58\\x74\"<\/strong> \u306f png \u30c7\u30fc\u30bf\u306e\u5148\u982d\u3067\u3082\u767b\u5834\u3057\u305f16\u9032\u6570\u30a8\u30b9\u30b1\u30fc\u30d7\u30b7\u30fc\u30b1\u30f3\u30b9\u3067 'tEXt' \u3068\u540c\u7fa9\u3067\u3059\u3002<br>\u3064\u3044\u3067\u306b\u3001 $data \u306e\u4e2d\u8eab\u304c\u7a7a\u3067\u306a\u3044\u304b\u3082\u8abf\u3079\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-comcent-blog-miniheadline01 modSubheading\">Chunk Data \u306e\u4e2d\u8eab\u304b\u3089\u3001\u76ee\u7684\u306e tEXt \u30c1\u30e3\u30f3\u30af\u304b\u5224\u5b9a\u3059\u308b<\/h5>\n\n\n\n<p>\u30c1\u30e3\u30f3\u30af\u304c tEXt \u3067\u3042\u308b\u3068\u5224\u660e\u3057\u305f\u3089\u4eca\u5ea6\u306f\u305d\u306e\u30c1\u30e3\u30f3\u30af\u30c7\u30fc\u30bf\u304c Stable Diffusion Web UI \u304c\u4ed5\u8fbc\u3093\u3060\u3082\u306e\u304b\u5224\u5b9a\u3057\u307e\u3059\u3002tXEt \u30c1\u30e3\u30f3\u30af\u306f\u4e00\u3064\u306e png \u30d5\u30a1\u30a4\u30eb\u306b\u8907\u6570\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001 tEXt \u30c1\u30e3\u30f3\u30af\u3092\u898b\u3064\u3051\u3066\u3082\u305d\u308c\u304c\u4eca\u56de\u306e\u76ee\u7684\u3067\u3042\u308b\u30c7\u30fc\u30bf\u3068\u306f\u9650\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p>tXEt \u30c1\u30e3\u30f3\u30af\u306f\u4e00\u822c\u7684\u306b\u30ad\u30fc\u30d0\u30ea\u30e5\u30fc\u578b\u306e\u69cb\u9020\u3067\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002\u4eca\u56de\u76ee\u7684\u3068\u3059\u308b\u30ad\u30fc\u306f 'parameter' \u3068\u3044\u3046\u30ad\u30fc\u3067\u3059\u3002<br>\u3053\u306e\u30ad\u30fc\u3068\u30d0\u30ea\u30e5\u30fc\u306f HEX \u5f62\u5f0f\u3067 <strong>'00'<\/strong> \u3068\u3044\u3046\u30c7\u30fc\u30bf\u3067\u533a\u5207\u3089\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u4e00\u65e6 HEX \u5f62\u5f0f\u306b\u5909\u63db\u3092\u304b\u3051\u305f\u4e0a\u3067\u5224\u5b9a\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted modBlobCode\">\/\/\u4e00\u65e6 hex \u5f62\u5f0f\u306b\u5909\u63db\n$hex = bin2hex($data);\n\n \/\/\u30bb\u30d1\u30ec\u30fc\u30bf\u3092\u63a2\u3059\n$separatorIndex = strpos($hex, '00');\n\n\/\/\u30bb\u30d1\u30ec\u30fc\u30bf\u304c\u7121\u3044\nif ($separatorIndex === false)\n{\n  continue;\n}<\/pre>\n\n\n\n<p>strpos \u95a2\u6570\u306b\u3088\u308a\u3001'00' \u304c\u73fe\u308c\u308b\u4f4d\u7f6e\u3092\u691c\u7d22\u3057\u3001$separatorIndex \u306b\u4fdd\u6301\u3057\u3066\u304a\u304d\u307e\u3059\u3002<br>$separatorIndex \u3088\u308a\u624b\u524d\u304c\u30ad\u30fc\u3001\u305d\u308c\u4ee5\u964d\u304c\u30c7\u30fc\u30bf\u90e8\u5206\u306b\u306a\u308b\u306e\u3067\u3059\u304c\u3001\u305d\u3082\u305d\u3082 '00' \u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u660e\u3089\u304b\u306b\u5bfe\u8c61\u5916\u306e\u30c7\u30fc\u30bf\u306a\u306e\u3067\u3001 continue \u3067\u6b21\u306e\u30c1\u30e3\u30f3\u30af\u691c\u7d22\u306b\u96e2\u8131\u3057\u307e\u3059\u3002 <\/p>\n\n\n\n<pre class=\"wp-block-preformatted modBlobCode\">\/\/\u5148\u982d\u30d1\u30e9\u30e1\u30fc\u30bf\u304c 'parameter' \u3067\u306f\u306a\u3044<br>if (substr($hex, 0, $separatorIndex) !== \"706172616d6574657273\")<br>{<br>  continue;<br>}<br><br>\/\/\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u308b<br>fclose($fp);<br><br>\/\/\u30c7\u30fc\u30bf\u3092\u8fd4\u3059<br>return hex2bin(substr($hex, $separatorIndex + 2));<\/pre>\n\n\n\n<p><strong>\"706172616d6574657273\"<\/strong> \u306f HEX \u5f62\u5f0f\u306b\u304a\u3051\u308b <strong>'parameter'<\/strong> \u306e\u5024\u3067\u3059\u3002\u30ad\u30fc\u90e8\u5206\u304c\u3053\u308c\u306b\u4e00\u81f4\u3057\u306a\u3044\u5834\u5408\u3082\u5bfe\u8c61\u5916\u306a\u306e\u3067\u3001  continue \u3067\u6b21\u306e\u30c1\u30e3\u30f3\u30af\u691c\u7d22\u306b\u96e2\u8131\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u3053\u307e\u3067\u6761\u4ef6\u306b\u5408\u81f4\u3057\u305f\u3089 '00' \u4ee5\u964d\u304c\u76ee\u7684\u306e\u30c7\u30fc\u30bf\u3067\u3059\u3002\u3053\u308c\u4ee5\u4e0a\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080\u5fc5\u8981\u304c\u306a\u3044\u306e\u3067 fclose \u95a2\u6570\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u653e\u3057\u3001\u76ee\u7684\u306e\u30c7\u30fc\u30bf\u3092\u5143\u306e\u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u306b\u5fa9\u5143\u3057\u3064\u3064 return \u3067\u8fd4\u5374\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline02 modMiddleHeading\">\u307e\u3068\u3081<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"683\" loading=\"lazy\" src=\"https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0001-1024x683.png\" alt=\"\" class=\"wp-image-4946\" srcset=\"https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0001-1024x683.png 1024w, https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0001-300x200.png 300w, https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0001-768x512.png 768w, https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-0001.png 1500w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u3053\u3053\u307e\u3067\u89e3\u8aac\u3057\u3066\u304d\u305f png \u306e\u30c1\u30e3\u30f3\u30af\u30c7\u30fc\u30bf\u306f Stable Diffusion Web UI \u306b\u56fa\u6709\u306e\u3082\u306e\u3067\u306f\u306a\u304f\u3001\u69d8\u3005\u306a\u7528\u9014\u3067\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002JPEG \u306b\u304a\u3051\u308b Exif \u306e\u3088\u3046\u306a\u4f7f\u308f\u308c\u65b9\u3082\u3057\u307e\u3059\u304c\u3001\u4f5c\u8005\u3084\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u90fd\u5408\u306b\u3088\u3063\u3066\u3088\u308a\u67d4\u8edf\u306b\u5b9a\u7fa9\u3067\u304d\u308b\u306e\u304c\u5f37\u307f\u3068\u8a00\u3048\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>Web \u30b7\u30b9\u30c6\u30e0\u306b\u3088\u3063\u3066\u306f\u6709\u7528\u304b\u3082\u3057\u308c\u306a\u3044\u306e\u3067\u3001\u53c2\u8003\u306b\u3057\u3066\u3044\u305f\u3060\u3051\u308b\u3068\u5e78\u3044\u3067\u3059\u3002<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Stable Diffusion \u3092\u52d5\u304b\u3059\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u3057\u3066\u4eca\u306a\u304a\u30c7\u30a3\u30d5\u30a1\u30af\u30c8\u30b9\u30bf\u30f3\u30c0\u30fc\u30c9\u3068\u547c\u3079\u308b Stable Diffusion Web UI \u3067\u3059\u304c\u3001\u751f\u6210\u3057\u305f png \u753b\u50cf\u3092\u300cPNG Info\u300d\u30bf\u30d6\u306b\u6295\u3052\u5165\u308c\u308b\u3068\u4f7f [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":4944,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[155,35,275,163,36],"coauthors":[45],"class_list":["post-4807","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-backend","tag-ai","tag-php","tag-png","tag-stable-diffusion-web-ui","tag-36"],"author_meta":{"nickname":"N.Go","position":"\u30d7\u30ed\u30b0\u30e9\u30de\u30fc","icon_url":"https:\/\/comcent.co.jp\/blog\/images\/authorNg-150x150.png","author_url":"https:\/\/comcent.co.jp\/blog\/archives\/author\/noji\/"},"tag_names":["AI","php","PNG","Stable Diffusion web UI","\u30d0\u30c3\u30af\u30a8\u30f3\u30c9"],"thumbnail_url":"https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2024\/12\/noji-2024-12-01-blog-thumbnail-300x200.jpg","_links":{"self":[{"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/posts\/4807","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/comments?post=4807"}],"version-history":[{"count":13,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/posts\/4807\/revisions"}],"predecessor-version":[{"id":5014,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/posts\/4807\/revisions\/5014"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/media\/4944"}],"wp:attachment":[{"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/media?parent=4807"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/categories?post=4807"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/tags?post=4807"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/coauthors?post=4807"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}