$code = @"
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;

public class ImageProcessor {
    public static void RemoveWhiteBg(string inputFile, string outputFile, int threshold) {
        Bitmap bmp = new Bitmap(inputFile);
        Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
        BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
        
        int bytes = Math.Abs(bmpData.Stride) * bmp.Height;
        byte[] rgbValues = new byte[bytes];
        Marshal.Copy(bmpData.Scan0, rgbValues, 0, bytes);
        
        for (int i = 0; i < rgbValues.Length; i += 4) {
            byte b = rgbValues[i];
            byte g = rgbValues[i + 1];
            byte r = rgbValues[i + 2];
            byte a = rgbValues[i + 3];
            
            float avg = (r + g + b) / 3f;
            if (avg > threshold && r > threshold - 10 && g > threshold - 10 && b > threshold - 10) {
                float factor = (avg - threshold) / (255f - threshold);
                int alpha = (int)(255 * (1 - factor));
                if (alpha < 0) alpha = 0;
                if (alpha > 255) alpha = 255;
                rgbValues[i] = 255;
                rgbValues[i + 1] = 255;
                rgbValues[i + 2] = 255;
                rgbValues[i + 3] = (byte)alpha;
            }
        }
        
        Marshal.Copy(rgbValues, 0, bmpData.Scan0, bytes);
        bmp.UnlockBits(bmpData);
        bmp.Save(outputFile, ImageFormat.Png);
        bmp.Dispose();
    }
}
"@
Add-Type -TypeDefinition $code -ReferencedAssemblies System.Drawing
[ImageProcessor]::RemoveWhiteBg("d:\Code\Project\X-Financial\web\src\assets\images\raw_documents.png", "d:\Code\Project\X-Financial\web\src\assets\images\hero-financial-decor.png", 235)
Write-Host "Done"
