Commit 0c1cf1e07 for imagemagick.org

commit 0c1cf1e07631ea805201dcb6419334e2f69c20df
Author: Cristy <urban-warrior@imagemagick.org>
Date:   Sat May 30 19:07:44 2026 -0400

    2nd attempt to scale pHash

diff --git a/MagickCore/statistic.c b/MagickCore/statistic.c
index 2b2f9893c..2714153d3 100644
--- a/MagickCore/statistic.c
+++ b/MagickCore/statistic.c
@@ -1761,6 +1761,10 @@ MagickExport ChannelPerceptualHash *GetImagePerceptualHash(const Image *image,
     ChannelMoments
       *moments;

+    double
+      mn = DBL_MAX,
+      mx = -DBL_MAX;
+
     Image
       *hash_image;

@@ -1793,8 +1797,26 @@ MagickExport ChannelPerceptualHash *GetImagePerceptualHash(const Image *image,
       break;
     for (channel=0; channel <= MaxPixelChannels; channel++)
       for (j=0; j < MaximumNumberOfImageMoments; j++)
-        perceptual_hash[channel].phash[i][j]=
-          (-MagickSafeLog10(fabs(moments[channel].invariant[j])));
+      {
+        double x = moments[channel].invariant[j];
+        double alpha = (x > 0.0 ? 1.0 : (x < 0.0 ? -1.0 : 0.0))*
+          log10(fabs(x)+MagickEpsilon);
+
+        if (alpha < mn)
+          mn=alpha;
+        if (alpha > mx)
+          mx=alpha;
+      }
+    for (channel=0; channel <= MaxPixelChannels; channel++)
+      for (j=0; j < MaximumNumberOfImageMoments; j++)
+      {
+        double x = moments[channel].invariant[j];
+        double alpha = (x > 0.0 ? 1.0 : (x < 0.0 ? -1.0 : 0.0))*
+          log10(fabs(x)+MagickEpsilon);
+        double scaled = 255.0*(alpha-mn)*MagickSafeReciprocal(mx-mn);
+        perceptual_hash[channel].phash[i][j]=MagickMin(MagickMax(scaled,0.0),
+          255.0);
+      }
     moments=(ChannelMoments *) RelinquishMagickMemory(moments);
   }
   colorspaces=DestroyString(colorspaces);