Commit bf438a15e for imagemagick.org

commit bf438a15ee481f21afa4559605ff368e64794667
Author: Cristy <urban-warrior@imagemagick.org>
Date:   Thu Jul 23 22:32:01 2026 -0400

    divide honors SVG 1.2; divide-dst and divide-src are mathematical ops

diff --git a/MagickCore/compare.c b/MagickCore/compare.c
index 95749dc42..c50907e55 100644
--- a/MagickCore/compare.c
+++ b/MagickCore/compare.c
@@ -3495,7 +3495,7 @@ static Image *SIMPhaseCorrelationImage(const Image *alpha_image,
   /*
     Divide the results.
   */
-  CompositeLayers((Image *) magnitude_image,DivideFxCompositeOp,
+  CompositeLayers((Image *) magnitude_image,DivideDstCompositeOp,
     complex_multiplication,0,0,exception);
   /*
     Do the IFT and return the cross-correlation result.
diff --git a/MagickCore/composite.c b/MagickCore/composite.c
index 1fb67e7e9..e69ad0a7a 100644
--- a/MagickCore/composite.c
+++ b/MagickCore/composite.c
@@ -2384,8 +2384,8 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
         case ColorDodgeCompositeOp:
         case DarkenCompositeOp:
         case DifferenceCompositeOp:
+        case DivideCompositeOp:
         case DivideDstCompositeOp:
-        case DivideFxCompositeOp:
         case DivideSrcCompositeOp:
         case ExclusionCompositeOp:
         case FreezeCompositeOp:
@@ -2931,9 +2931,10 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
               canvas_dissolve*Da*Dc+canvas_dissolve*Da*Dc);
             break;
           }
-          case DivideDstCompositeOp:
+          case DivideCompositeOp:
           {
             D=(Da > 0.0) ? (Dca/Da) : 0.0;
+            S=(Sa > 0.0) ? (Sca/Sa) : 0.0;
             if (fabs(S) < MagickEpsilon)
               blend=1.0;
             else
@@ -2942,24 +2943,36 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
               Sa*Da*blend);
             break;
           }
-          case DivideFxCompositeOp:
+          case DivideDstCompositeOp:
           {
+            if (compose_sync == MagickFalse)
+              {
+                if (fabs(Dc) < MagickEpsilon)
+                  pixel=(double) QuantumRange;
+                else
+                  pixel=(double) QuantumRange*(Sc/Dc);
+                break;
+              }
             if (fabs(Dca) < MagickEpsilon)
-              pixel=0.0;
+              pixel=(double) QuantumRange*(Sca+(1.0-Sa));
             else
-              pixel=(double) QuantumRange*(Sca/Dca);
+              pixel=(double) QuantumRange*(Sca/Dca+Sca*(1.0-Da)+Dca*(1.0-Sa));
             break;
           }
           case DivideSrcCompositeOp:
           {
-            S=(Sa > 0.0) ? (Sca/Sa) : 0.0;
-            D=(Da > 0.0) ? (Dca/Da) : 0.0;
-            if (fabs(D) < MagickEpsilon)
-              blend=1.0;
+            if (compose_sync == MagickFalse)
+              {
+                if (fabs(Sc) < MagickEpsilon)
+                  pixel=(double) QuantumRange;
+                else
+                  pixel=(double) QuantumRange*(Dc/Sc);
+                break;
+              }
+            if (fabs(Dca) < MagickEpsilon)
+              pixel=(double) QuantumRange*(Dca+(1.0-Da));
             else
-              blend=RoundToUnity(S/D);
-            pixel=(double) QuantumRange*RoundToUnity(Sca*(1.0-Da)+Dca*(1.0-Sa)+
-              Sa*Da*blend);
+              pixel=(double) QuantumRange*(Dca/Sca+Dca*(1.0-Sa)+Sca*(1.0-Da));
             break;
           }
           case DstAtopCompositeOp:
diff --git a/MagickCore/composite.h b/MagickCore/composite.h
index 8c5e1abc2..d06f89a08 100644
--- a/MagickCore/composite.h
+++ b/MagickCore/composite.h
@@ -106,7 +106,7 @@ typedef enum
   RMSECompositeOp,
   SaliencyBlendCompositeOp,
   SeamlessBlendCompositeOp,
-  DivideFxCompositeOp
+  DivideCompositeOp
 } CompositeOperator;

 extern MagickExport MagickBooleanType
diff --git a/MagickCore/option.c b/MagickCore/option.c
index 33e264f64..2204297e1 100644
--- a/MagickCore/option.c
+++ b/MagickCore/option.c
@@ -1297,9 +1297,8 @@ static const OptionInfo
     { "Displace", DisplaceCompositeOp, UndefinedOptionFlag, MagickFalse },
     { "Dissolve", DissolveCompositeOp, UndefinedOptionFlag, MagickFalse },
     { "Distort", DistortCompositeOp, UndefinedOptionFlag, MagickFalse },
-    { "Divide", DivideDstCompositeOp, DeprecateOptionFlag, MagickTrue },
+    { "Divide", DivideCompositeOp, DeprecateOptionFlag, MagickTrue },
     { "DivideDst", DivideDstCompositeOp, UndefinedOptionFlag, MagickFalse },
-    { "DivideFx", DivideFxCompositeOp, UndefinedOptionFlag, MagickFalse },
     { "DivideSrc", DivideSrcCompositeOp, UndefinedOptionFlag, MagickFalse },
     { "DstAtop", DstAtopCompositeOp, UndefinedOptionFlag, MagickFalse },
     { "Dst", DstCompositeOp, UndefinedOptionFlag, MagickFalse },