مكتبة Open Source Go لإنشاء الصور ومعالجتها
واجهة برمجة تطبيقات Powerful Go التي تدعم تغيير حجم صور JPEG و PNG و GIF و TIFF و BMP وقصها وتدويرها. يمكنك أيضًا ضبط سطوع الصورة والتباين وتصحيح جاما للصور.
تعد Go Imaging API مفتوحة المصدر حزمة قوية جدًا توفر وظائف كاملة تتعلق بإنشاء الصور ومعالجتها. المكتبة مرنة للغاية وتسمح للمطورين بإنشاء صور جديدة بسهولة وتعديل الصور الموجودة ببضعة سطرين من التعليمات البرمجية.
Imaging هي مكتبة Go نقية صغيرة الحجم وفعالة في الوظائف. لقد تضمن دعمًا للعديد من تنسيقات ملفات الصور المهمة مثل JPEG و PNG و GIF و TIFF و BMP وغيرها الكثير. تضمنت المكتبة أيضًا العديد من مرشحات إعادة التشكيل لتغيير حجم الصورة. بعض المرشحات المهمة هي NearestNeighbor ، و Lanczos ، و CatmullRom ، و MitchellNetravali ، و Linear ، و Box ، وما إلى ذلك. سهلت المكتبة أيضًا المطورين لإنشاء عوامل تصفية مخصصة.
تضمنت مكتبة التصوير المجانية العديد من الميزات المهمة المتعلقة بمعالجة الصور ، مثل تغيير حجم الصور ، وتدوير الصورة ، واقتصاص الصورة ، وضبط سطوع الصورة ، وتعديلات تباين الصورة ، وتصحيح جاما للصور ، وتغيير تشبع الصورة ، واستنساخ الصور ، والصورة تمويه الصور وتشفيرها وفك تشفيرها وتراكب الصور وإضافة الحدة وإنشاء صورة مصغرة والعديد من الميزات الأخرى.
الشروع في التصوير
الطريقة الأسهل والموصى بها لتثبيت Imagingis عبر GitHub.
قم بتثبيت Imaging عبر GitHub
go get -u github.com/disintegration/imaging
إنشاء صورة جديدة عبر Go API
تضمنت مكتبة التصوير مفتوحة المصدر دعمًا لإنشاء صور جديدة داخل التطبيق الخاص بها باستخدام أوامر Go. يتطلب إنشاء الصورة الجديدة عرض الصورة وارتفاعها ولون خلفية الصورة وتنسيق إخراج الصورة. يمكنك أيضًا تعديل الصورة التي تم إنشاؤها بسهولة وتنفيذ عمليات مختلفة مثل الوجه ، وضبط العتامة ، والمزج ، والتمويه ، وغير ذلك الكثير.
إنشاء صورة جديدة عبر Go API
func New(width, height int, fillColor color.Color) *image.NRGBA {
if width <= 0 || height <= 0 {
return &image.NRGBA{}
}
c := color.NRGBAModel.Convert(fillColor).(color.NRGBA)
if (c == color.NRGBA{0, 0, 0, 0}) {
return image.NewNRGBA(image.Rect(0, 0, width, height))
}
return &image.NRGBA{
Pix: bytes.Repeat([]byte{c.R, c.G, c.B, c.A}, width*height),
Stride: 4 * width,
Rect: image.Rect(0, 0, width, height),
}
}
تحويل الصورة إلى تنسيقات أخرى عبر Go
يمكن لمطوري البرامج تحويل صورهم بسهولة إلى تنسيقات ملفات أخرى مدعومة داخل تطبيقات GO الخاصة بهم باستخدام مكتبة تصوير مجانية. تحتاج فقط إلى توفير اسم الصورة وتنسيق الصورة الناتجة. باستخدام وظيفة Save ، يمكنك بسهولة تصدير الصور إلى العديد من تنسيقات ملفات الصور الأخرى المدعومة مثل PNG و BMP و GIF و JPEG و TIFF والمزيد.
تغيير حجم الصور واقتصاصها
تضمنت واجهة برمجة التطبيقات للتصوير المجاني وظائف لتغيير حجم الصور وفقًا لاحتياجاتك باستخدام أوامر Go. أولاً ، تحتاج إلى فتح صورة وتوفير ارتفاع وعرض الصورة لتغيير حجمها. خيار آخر هو أنه يمكنك تغيير حجم الصورة بمجرد توفير العرض من خلال الحفاظ على نسبة العرض إلى الارتفاع. تتيح المكتبة أيضًا اقتصاص الصورة الأصلية من خلال توفير العرض والارتفاع المخصصين واستخدام المرساة المركزية.
اقتصاص الصورة وتغيير حجمها عبر Go API
func cropAndResize(img image.Image, width, height int, anchor Anchor, filter ResampleFilter) *image.NRGBA {
dstW, dstH := width, height
srcBounds := img.Bounds()
srcW := srcBounds.Dx()
srcH := srcBounds.Dy()
srcAspectRatio := float64(srcW) / float64(srcH)
dstAspectRatio := float64(dstW) / float64(dstH)
var tmp *image.NRGBA
if srcAspectRatio < dstAspectRatio {
cropH := float64(srcW) * float64(dstH) / float64(dstW)
tmp = CropAnchor(img, srcW, int(math.Max(1, cropH)+0.5), anchor)
} else {
cropW := float64(srcH) * float64(dstW) / float64(dstH)
tmp = CropAnchor(img, int(math.Max(1, cropW)+0.5), srcH, anchor)
}
return Resize(tmp, dstW, dstH, filter)
}
قلب وتدوير وطمس واستنساخ الصور
تضمنت مكتبة التصوير العديد من الميزات الهامة لمعالجة الصور مثل تقليب الصورة ، وتدوير الصورة ، والتعتيم ، والاستنساخ. لعمل نسخة من صورة موجودة ، تحتاج فقط إلى استدعاء وظيفة Clone وتقديم الصورة الحالية. تدعم المكتبة أيضًا تدوير صورتك وتقليبها باستخدام سطرين فقط من التعليمات البرمجية. يمكنك بسهولة تدوير صورة بزاوية معينة عكس اتجاه عقارب الساعة. معلمة الزاوية هي زاوية الدوران بالدرجات.
استنساخ الصورة عبر Go API
func Clone(img image.Image) *image.NRGBA {
src := newScanner(img)
dst := image.NewNRGBA(image.Rect(0, 0, src.w, src.h))
size := src.w * 4
parallel(0, src.h, func(ys <-chan int) {
for y := range ys {
i := y * dst.Stride
src.scan(0, y, src.w, y+1, dst.Pix[i:i+size])
}
})
return dst
}