تسلسل الصور في Go: دليل شامل
في Go، تعد معالجة الصور أمرًا سهلاً بفضل مكتبات الصور القوية. ومع ذلك، إذا كنت تريد دمج صور متعددة في لوحة قماشية واحدة كبيرة، فقد تصبح الأمور مربكة. فيما يلي دليل خطوة بخطوة للتعامل مع هذه المهمة مثل المحترفين.
تحميل الصور
لبدء الأمور، قم بتحميل الصور التي ترغب في ربطها. إليك مقتطف التعليمات البرمجية للقيام بذلك:// افتح الصورة الأولى imgFile1، يخطئ:= os.Open("test1.jpg") إذا أخطأت!= لا شيء { FMT.Println (يخطئ) } // فك تشفير الصورة img1, _, خطأ := image.Decode(imgFile1) إذا أخطأت!= لا شيء { FMT.Println (يخطئ) } // افتح الصورة الثانية imgFile2، يخطئ:= os.Open("test2.jpg") إذا أخطأت!= لا شيء { FMT.Println (يخطئ) } // فك تشفير الصورة img2, _, خطأ := image.Decode(imgFile2) إذا أخطأت!= لا شيء { FMT.Println (يخطئ)// Open the first image imgFile1, err := os.Open("test1.jpg") if err != nil { fmt.Println(err) } // Decode the image img1, _, err := image.Decode(imgFile1) if err != nil { fmt.Println(err) } // Open the second image imgFile2, err := os.Open("test2.jpg") if err != nil { fmt.Println(err) } // Decode the image img2, _, err := image.Decode(imgFile2) if err != nil { fmt.Println(err) }
إنشاء صورة جديدة بعد ذلك، لنقم بإنشاء صورة جديدة واسعة لاستيعاب الصورتين المحملتين. حدد أبعاد هذه اللوحة الجديدة عن طريق إضافة عرض الصورتين:
r := image.Rectangle{image.Point{0, 0}, img1.Bounds().Dx() img2.Bounds( .Dx(), img1.Bounds().Dy()} rgba := image.NewRGBA(r)
r := image.Rectangle{image.Point{0, 0}, img1.Bounds().Dx() img2.Bounds().Dx(), img1.Bounds().Dy()} rgba := image.NewRGBA(r)رسم الصور
الآن يأتي الجزء الممتع: تجميع الصور داخل هذه اللوحة القماشية الجديدة. حدد الموضع الذي تريد وضع الصورة الثانية فيه، ثم ارسم الصورتين على اللوحة القماشية:
// نقطة البداية للصورة الثانية (أسفل اليسار) sp2 := image.Point{img1.Bounds().Dx(), 0} // مستطيل للصورة الثانية r2 := image.Rectangle{sp2, sp2.Add(img2.Bounds().Size())} // ارسم الصورة الأولى draw.Draw(rgba, img1.Bounds(), img1, image.Point{0, 0}, draw.Src) // ارسم الصورة الثانية draw.Draw(rgba, r2, img2, image.Point{0, 0}, draw.Src)
r := image.Rectangle{image.Point{0, 0}, img1.Bounds().Dx() img2.Bounds().Dx(), img1.Bounds().Dy()} rgba := image.NewRGBA(r)حفظ النتيجة
أخيرًا، دعونا نخلد هذه السلسلة تحفة فنية عن طريق حفظها كملف صورة جديد:
out, err := os.Create("./output.jpg") إذا أخطأت!= لا شيء { FMT.Println (يخطئ) } فار opt jpeg.Options جودة الاختيار = 80 jpeg.Encode(out, rgba, &opt)
out, err := os.Create("./output.jpg") if err != nil { fmt.Println(err) } var opt jpeg.Options opt.Quality = 80 jpeg.Encode(out, rgba, &opt)
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3