Heim Web-Frontend PS-Tutorial Analysereihe zum Prinzip des PhotoShop-Algorithmus – Pixelierung – Fragmentierung

Analysereihe zum Prinzip des PhotoShop-Algorithmus – Pixelierung – Fragmentierung

Feb 21, 2017 am 09:18 AM

Um die Beliebtheit des vorherigen Artikels fortzusetzen, sprechen wir weiter über einige etwas einfachere Algorithmen.

In diesem Artikel geht es zunächst um den Fragmentierungsalgorithmus:

PhotoShop算法原理解析系列 - 像素化-碎片 PhotoShop算法原理解析系列 - 像素化-碎片 PhotoShop算法原理解析系列 - 像素化-碎片 PhotoShop算法原理解析系列 - 像素化-碎片

Dies ist ein destruktiver Filter. Der Grund für die Verwendung schöner Frauen ist, dass 90 % der Menschen, die Bilder erstellen, Männer sind, perverse Männer.

Zum Prinzip des Fragmentfilters gibt es im Internet folgende Informationen: Erstellen Sie vier Kopien des Bildes, die zueinander versetzt sind, wodurch ein Geisterbild-ähnlicher Effekt entsteht.

Mit dem obigen Satz können wir beginnen.

Analyse: Durch den Vergleich der obigen Bilder, insbesondere der Augen, ist ersichtlich, dass das verarbeitete Bild wie ein einzelnes Auge aussehen sollte. Daher ist das Netzwerk die obige Aussage ist zuverlässig.

Wo ist also die Mitte des Versatzes und wie viele Versätze gibt es? In welche Richtungen sind die 4 Versätze auch sehr einfach? überprüfen:

Die spezifischen Schritte sind wie folgt: Öffnen Sie ein Bild und füllen Sie eine Stelle mit einer 2*2 Pixel großen roten Farbe an einer Stelle, an der die Farbe des Bildes relativ eintönig ist (z. B , kopieren Sie dann die Ebene, wenden Sie einen Fragmentfilter auf die kopierte Ebene an und stellen Sie die Ebenentransparenz auf 50 % ein, um das folgende Bild zu erhalten:

🎜> PhotoShop算法原理解析系列 - 像素化-碎片 Mit diesem Effekt können Sie leicht die Schlussfolgerung ziehen:

Die Mitte des Versatzes ist auf jedem Pixel zentriert, und die vier Versätze sind symmetrisch dazu in der Mitte, mit einer Neigung von 45 Grad, sind gleichmäßig in einem Kreis angeordnet, mit horizontalem und vertikalem Versatz von jeweils 45 Grad und einem Versatz von 4 Pixeln.

Die Frage, wie man überlagert, lässt sich also erraten, nämlich den Durchschnitt der akkumulierten Werte nach vier Offsets zu ermitteln.

Basierend auf dieser Idee habe ich den folgenden Algorithmus geschrieben:

private void CmdFragment_Click(object sender, EventArgs e)
{    int X, Y, Z, XX, YY;    int Width, Height, Stride;    int Speed, Index;    int SumR, SumG, SumB;
    Bitmap Bmp = (Bitmap)Pic.Image;    if (Bmp.PixelFormat != PixelFormat.Format24bppRgb) throw new Exception("不支持的图像格式.");

    Width = Bmp.Width; Height = Bmp.Height; Stride = (int)((Bmp.Width * 3 + 3) & 0XFFFFFFFC);    byte[] ImageData = new byte[Stride * Height];                                    // 用于保存图像数据,(处理前后的都为他)
    byte[] ImageDataC = new byte[Stride * Height];                                   // 用于保存克隆的图像数据
    int[] OffsetX = new int[] { 4, -4, -4, 4 };                                      // 每个点的偏移量
    int[] OffsetY = new int[] { -4, -4, 4, 4 };    fixed (byte* P = &ImageData[0], CP = &ImageDataC[0])
    {        byte* DataP = P, DataCP = CP;
        BitmapData BmpData = new BitmapData();
        BmpData.Scan0 = (IntPtr)DataP;                                              //  设置为字节数组的的第一个元素在内存中的地址
        BmpData.Stride = Stride;
        Bmp.LockBits(new Rectangle(0, 0, Bmp.Width, Bmp.Height), ImageLockMode.ReadWrite | ImageLockMode.UserInputBuffer, PixelFormat.Format24bppRgb, BmpData);

        Stopwatch Sw = new Stopwatch();                                             //  只获取计算用时        Sw.Start();
        System.Buffer.BlockCopy(ImageData, 0, ImageDataC, 0, Stride * Height);     //  填充克隆数据        

        for (Y = 0; Y < Height; Y++)
        {
            Speed = Y * Stride;            for (X = 0; X < Width; X++)
            {
                SumB = 0; SumG = 0; SumR = 0;                for (Z = 0; Z < 4; Z++)                                           //  累积取样点的取样和                {
                    XX = X + OffsetX[Z];
                    YY = Y + OffsetY[Z];                    if (XX < 0)                                                    //   注意越界
                        XX = 0;                    else if (XX >= Width)
                        XX = Width - 1;                    if (YY < 0)
                        YY = 0;                    else if (YY >= Height)
                        YY = Height - 1;
                    Index = YY * Stride + XX * 3;
                    SumB += DataCP[Index];
                    SumG += DataCP[Index + 1];
                    SumR += DataCP[Index + 2];
                }

                DataP[Speed] = (byte)((SumB+2) >> 2);    //  求平均值(Sum+2)/4,为什么要+2,就为了四舍五入。比如如果计算结果为108.6,则取像素109更为合理     
                DataP[Speed + 1] = (byte)((SumG + 2) >> 2);
                DataP[Speed + 2] = (byte)((SumR + 2) >> 2);
                Speed += 3;                                                     //  跳往下一个像素            }
        }
        Sw.Stop();        this.Text = "计算用时: " + Sw.ElapsedMilliseconds.ToString() + " ms";
        Bmp.UnlockBits(BmpData);                         //  必须先解锁,否则Invalidate失败     }
    Pic.Invalidate();}
Nach dem Login kopieren

Algorithmus: OffsetX und OffsetY sind jeweils die Offsets der Abtastpunktpixel. Da dieser Filter Feldoperationen umfasst, ist vor der Verarbeitung ebenfalls eine Pixelsicherung erforderlich, die Sicherungsdaten werden hier jedoch nicht erweitert. Daher müssen die Koordinaten des Abtastpunkts im internen Code überprüft werden, um festzustellen, ob er seinen Bereich überschreitet. Wenn er den Bereich überschreitet, liegt er normalerweise im Bereich des Bildfilteralgorithmus. Es gibt drei Verarbeitungsmethoden:

(1) Wenn er überschritten wird, wird er als sein nächster Grenzwert betrachtet, d. h. als wiederholte Kantenpixel. Dieser Teil des Codes ist der oben angegebene if...else if-Teil .

(2) Das Zurückspulen kann durch den folgenden Code beschrieben werden:

while (XX >= Width)
    XX = XX - Width;while (XX < 0)
    XX = XX + Width;while (YY >= Height)
    YY = YY - Height;while (YY < 0)
    YY = YY + Height;
Nach dem Login kopieren

(3) Zählen Sie nur Pixel innerhalb des Bildbereichs:

 if (XX >= 0 && XX < Width && YY >= 0 && YY < Height)
 {
       // 累加计算
 }
Nach dem Login kopieren

Dazu müssen Sie natürlich a verwenden Variable, um es aufzuzeichnen. Wie viele qualifizierende Berechnungen durchgeführt wurden.

Interessierte Freunde können den Code ändern und es ausprobieren.

Im obigen Codeausschnitt ist DataP[Speed] = (byte)((SumB+2) >> 2); genauer Angemessener.

Nach dem Test stimmt der obige Code zu 100 % mit dem Effekt der PS-Verarbeitung überein. Es zeigt, dass unsere Vermutung völlig richtig ist.

Sie können den Algorithmus auch weiter ausbauen: Überlegen Sie weiter, warum müssen es 4 Geisterbilder sein? muss 4 sein. Der horizontale und vertikale Versatz der Pixel. Ich stelle das Bild unten zur Verfügung, damit interessierte Leser es selbst entwickeln können.

PhotoShop算法原理解析系列 - 像素化-碎片

Im Bild beträgt der Winkel 32 Grad, der Radius 10 und die Anzahl der Fragmente 7, Dies kann einen ähnlichen Effekt wie den folgenden erzeugen (Sie können meinen Imageshop zur Überprüfung verwenden):

PhotoShop算法原理解析系列 - 像素化-碎片 Bitte achten Sie auf die chinesische PHP-Website! PhotoShop算法原理解析系列 - 像素化-碎片

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Grund, warum PS immer wieder Laden zeigt? Was ist der Grund, warum PS immer wieder Laden zeigt? Apr 06, 2025 pm 06:39 PM

PS "Laden" Probleme werden durch Probleme mit Ressourcenzugriff oder Verarbeitungsproblemen verursacht: Die Lesegeschwindigkeit von Festplatten ist langsam oder schlecht: Verwenden Sie Crystaldiskinfo, um die Gesundheit der Festplatte zu überprüfen und die problematische Festplatte zu ersetzen. Unzureichender Speicher: Upgrade-Speicher, um die Anforderungen von PS nach hochauflösenden Bildern und komplexen Schichtverarbeitung zu erfüllen. Grafikkartentreiber sind veraltet oder beschädigt: Aktualisieren Sie die Treiber, um die Kommunikation zwischen PS und der Grafikkarte zu optimieren. Dateipfade sind zu lang oder Dateinamen haben Sonderzeichen: Verwenden Sie kurze Pfade und vermeiden Sie Sonderzeichen. Das eigene Problem von PS: Installieren oder reparieren Sie das PS -Installateur neu.

Was sind die häufigsten Fragen zum Exportieren von PDF auf PS Was sind die häufigsten Fragen zum Exportieren von PDF auf PS Apr 06, 2025 pm 04:51 PM

Häufig gestellte Fragen und Lösungen beim Exportieren von PS als PDF: Schriftbettungsprobleme: Überprüfen Sie die Option "Schriftart", wählen Sie "Einbetten" oder konvertieren Sie die Schriftart in eine Kurve (Pfad). Farbabweichungsproblem: Umwandeln Sie die Datei in den CMYK -Modus und passen Sie die Farbe an. Das direkte Exportieren mit RGB erfordert eine psychologische Vorbereitung auf Vorschau und Farbabweichung. Auflösungs- und Dateigrößesprobleme: Wählen Sie die Lösung gemäß den tatsächlichen Bedingungen oder verwenden Sie die Komprimierungsoption, um die Dateigröße zu optimieren. Problem mit Spezialeffekten: Vor dem Exportieren oder Abwägen der Vor- und Nachteile verschmelzen (flach) Schichten.

Wie kann man das Problem des Ladens lösen, wenn PS immer zeigt, dass es geladen wird? Wie kann man das Problem des Ladens lösen, wenn PS immer zeigt, dass es geladen wird? Apr 06, 2025 pm 06:30 PM

PS -Karte ist "Laden"? Zu den Lösungen gehören: Überprüfung der Computerkonfiguration (Speicher, Festplatte, Prozessor), Reinigen der Festplattenfragmentierung, Aktualisierung des Grafikkartentreibers, Anpassung der PS -Einstellungen, der Neuinstallation von PS und der Entwicklung guter Programmiergewohnheiten.

So setzen Sie den Kennwortschutz für Exportieren von PDF auf PS So setzen Sie den Kennwortschutz für Exportieren von PDF auf PS Apr 06, 2025 pm 04:45 PM

PDF mit Passwort geschützt in Photoshop exportieren: Öffnen Sie die Bilddatei. Klicken Sie auf "Datei" & gt; "Export" & gt; "Exportieren Sie als PDF". Stellen Sie die Option "Sicherheit" fest und geben Sie dasselbe Passwort zweimal ein. Klicken Sie auf "Exportieren", um eine PDF -Datei zu generieren.

Wie beschleunigt man die Ladegeschwindigkeit von PS? Wie beschleunigt man die Ladegeschwindigkeit von PS? Apr 06, 2025 pm 06:27 PM

Das Lösen des Problems des langsamen Photoshop-Startups erfordert einen mehrstufigen Ansatz, einschließlich: Upgrade-Hardware (Speicher, Solid-State-Laufwerk, CPU); Deinstallieren veraltete oder inkompatible Plug-Ins; Reinigen des Systemmülls und übermäßiger Hintergrundprogramme regelmäßig; irrelevante Programme mit Vorsicht schließen; Vermeiden Sie das Öffnen einer großen Anzahl von Dateien während des Starts.

Wie löste ich das Problem des Ladens, wenn die PS die Datei öffnet? Wie löste ich das Problem des Ladens, wenn die PS die Datei öffnet? Apr 06, 2025 pm 06:33 PM

Das Laden von Stottern tritt beim Öffnen einer Datei auf PS auf. Zu den Gründen gehören: zu große oder beschädigte Datei, unzureichender Speicher, langsame Festplattengeschwindigkeit, Probleme mit dem Grafikkarten-Treiber, PS-Version oder Plug-in-Konflikte. Die Lösungen sind: Überprüfen Sie die Dateigröße und -integrität, erhöhen Sie den Speicher, aktualisieren Sie die Festplatte, aktualisieren Sie den Grafikkartentreiber, deinstallieren oder deaktivieren Sie verdächtige Plug-Ins und installieren Sie PS. Dieses Problem kann effektiv gelöst werden, indem die PS -Leistungseinstellungen allmählich überprüft und genutzt wird und gute Dateimanagementgewohnheiten entwickelt werden.

Wie kontrolliert PS -Federn die Weichheit des Übergangs? Wie kontrolliert PS -Federn die Weichheit des Übergangs? Apr 06, 2025 pm 07:33 PM

Der Schlüssel zur Federkontrolle liegt darin, seine allmähliche Natur zu verstehen. PS selbst bietet nicht die Möglichkeit, die Gradientenkurve direkt zu steuern, aber Sie können den Radius und die Gradientenweichheit flexius durch mehrere Federn, Matching -Masken und feine Selektionen anpassen, um einen natürlichen Übergangseffekt zu erzielen.

Wie man die vertikale Referenzlinie von PS zieht Wie man die vertikale Referenzlinie von PS zieht Apr 06, 2025 pm 08:18 PM

Vertikale Leitfäden in Photoshop ziehen: Aktivieren Sie die Lineal View (View & gt; Herrscher). Bewegen Sie die Maus über die vertikale Kante des Herrschers, und dann wird der Cursor zu einer vertikalen Linie mit Doppelpfeilen und halten Sie die Maus, um die Referenzlinie herauszuziehen. Klicken Sie auf Löschen, indem Sie die Anleitung ziehen oder in ein Kreuz schweben.

See all articles