القائمة الرئيسية

الصفحات

كيفية برمجة تطبيقات "فلاتر للصور" بلغة جافا

Programming،Grayscale (Black and White) Filter API،Embossment Filter API،Posterization API،API Demonstration،How to program photo filters applications in Java،How to،program "photo filters" applications in Java،How to Programming photo filters app in Java،كيفية إضافة ثلاث فلاتر للصور إلى تطبيقاتك بجافا،كيفية برمجة تطبيقات "فلاتر للصور" بلغة جافا،





كيفية برمجة تطبيقات "فلاتر للصور" بلغة جافا



في هذه المقالة ، تعرف على كيف يمكن للمطورين تنفيذ ميزات قوية لتخصيص الصور
 باستخدام بضعة أسطر فقط من التعليمات البرمجية النظيفة والبسيطة.
تُحدث جمالية الصورة الفريدة فرقًا كبيرًا في تمثيل أي علامة تجارية 
شخصية أو مهنية عبر الإنترنت. يسعى المصورون المهنيون والهواة ، والمسؤولون
 التنفيذيون في مجال التسويق ، ورواد وسائل التواصل الاجتماعي غير الرسمية 
على حد سواء إلى السعي الدائم للحصول على محتوى مرئي يسهل تمييزه ،
 وهذه الحاجة الأساسية للتميز عن الجمهور ، أدت بدورها إلى إضفاء الطابع الديمقراطي 
على خدمات تحرير الصور والتصفية في العقد الماضي أو نحو ذلك. تتضمن كل منصة 
وسائط اجتماعية تقريبًا يمكنك التفكير فيها (ناهيك عن العديد من مواقع التجارة الإلكترونية
 والعديد من المواقع غير الرسمية الأخرى حيث يتم تحميل الصور بشكل متكرر) الآن
 بعض الوسائل لتغيير ملفات صور الفانيليا برمجيًا. يمكن أن تختلف هذه الخدمات المضمنة
 اختلافًا كبيرًا في التعقيد ، بدءًا من عناصر التحكم في السطوع البسيطة إلى التمويه الغاوسي.

مع هذه السهولة المكتشفة حديثًا للوصول إلى تصفية الصور ، شهدت تقنيات تصفية
 الصور الكلاسيكية انتعاشًا واسع النطاق في الشعبية. على سبيل المثال ، يمكن الآن
 تطبيق المظهر الخالد المرتبط بالصور بالأبيض والأسود على عجل على أي صورة
 يتم تحميلها أثناء التنقل. من خلال التلاعب البسيط في السطوع والتباين ، يمكن تسخير وهم النقش ،
 مما يسمح لنا بمحاكاة تقنية طباعة متبجحة منذ قرون. حتى الأتتالية - وهي جمالية 
كلاسيكية جريئة كانت مرتبطة بتواضع مع قيود الألوان الطبيعية لآلات الطباعة المبكرة -
 يمكن إنشاؤها على الفور داخل أي شبكة من وحدات البكسل.  

نظرًا لاستصواب تصفية الصور المبسطة (خاصة تلك التي تحتوي على ميزات تخصيص منطقية) ،
 فإن إنشاء هذه الأنواع من الميزات في أي تطبيق - خاصة تلك التي تتعامل 
مع قدر كبير من تحميلات الصور - هي فكرة ممتازة للمطورين للنظر فيها. 
بالطبع ، بمجرد أن نختار السير في هذا الاتجاه ، يظهر سؤال مهم: كيف يمكننا تضمين 
هذه الخدمات بكفاءة في تطبيقاتنا ، بالنظر إلى عدد لا يحصى من أسطر التعليمات
 البرمجية المرتبطة ببناء حتى أبسط وظائف تصفية الصور؟ 

لحسن الحظ ، تمت الإجابة على هذا السؤال مرة أخرى من خلال قوى العرض
 والطلب التي نشأت بشكل طبيعي في الثورة الصناعية الرقمية المستمرة. 
يمكن للمطورين الاعتماد على خدمات API لتصفية الصور المتاحة بسهولة للتحايل 
على عمليات البرمجة واسعة النطاق ، وبالتالي تنفيذ ميزات قوية لتخصيص الصور 
في بضعة أسطر فقط من التعليمات البرمجية النظيفة والبسيطة.


أوصاف API


الغرض من هذه المقالة هو توضيح ثلاثة حلول مجانية لواجهة برمجة
 التطبيقات لتصفية الصور والتي يمكن تنفيذها في تطبيقاتك باستخدام مقتطفات كود
 Java تكميلية وجاهزة للتشغيل. يتم توفير هذه المقتطفات أدناه في هذه المقالة ، 
مباشرة باتباع الإرشادات الموجزة لمساعدتك في تثبيت SDK . قبل أن نصل إلى هذه النقطة ،
 سأقوم أولاً بتسليط الضوء على كل حل ، وتقديم نظرة أكثر تفصيلاً على
 الاستخدامات الخاصة به ومعلمات طلب واجهة برمجة التطبيقات. 
يرجى ملاحظة أن كل واجهة برمجة تطبيقات ستتطلب مفتاح Cloudmersive API 
مجاني الطبقة لإكمال مكالمتك (يوفر حدًا من 800 استدعاء لواجهة برمجة التطبيقات شهريًا دون أي التزامات):


1*واجهة برمجة تطبيقات مرشح تدرج الرمادي (أبيض وأسود)

اقتصر التصوير الفوتوغرافي المبكر في البداية على طيف لوني بتدرج
 الرمادي بسبب القيود الطبيعية لتقنية الصور البدائية. فتحت نشأة التصوير 
الفوتوغرافي الملون أبوابًا جديدة ، بالتأكيد ، لكنها لم تحل تمامًا محل جمالية 
الصورة بالأبيض والأسود. حتى الآن ، في العصر الرقمي ، تستمر الصور الرمادية
 في تقديم درجة معينة من العمق والتعبير الذي يشعر الكثيرون أنه لا يمكن لطيف الألوان الأوسع إظهاره.  

عملية تحويل صورة ملونة إلى تدرج الرمادي عملية مباشرة. يتم تخزين معلومات
 اللون في مئات (أو آلاف) البكسل التي تشكل أي صورة رقمية ؛ يجبر تحويل التدرج
 الرمادي كل بكسل على تجاهل معلومات الألوان الخاصة به وتقديم درجات متفاوتة 
من السطوع بدلاً من ذلك. بالإضافة إلى التأثيرات الجمالية الموثقة جيدًا ، يوفر التحويل إلى 
التدرج الرمادي فوائد عملية أيضًا من خلال تقليل حجم الصورة المعنية.
 يسهل تخزين الصور ذات التدرج الرمادي وتحريرها ومعالجتها لاحقًا 
(خاصة في العمليات النهائية مثل التعرف الضوئي على الأحرف ، على سبيل المثال).

تقوم واجهة برمجة تطبيقات مرشح التدرج الرمادي أدناه بإجراء تحويل
 بسيط للأبيض والأسود ، ولا يتطلب سوى مسار ملف الصورة (يتم قبول تنسيقات مثل PNG و JPG )
 في معلمات الطلب الخاصة بها.  


2*واجهة برمجة تطبيقات مرشح النقش

النقش هو عملية طباعة مادية تعود جذورها إلى القرن الخامس عشر ،
 ولا تزال تستخدم حتى يومنا هذا في نفس السياق. في حين أن النقش الحقيقي
 يستلزم تضمين الأشكال المرتفعة جسديًا على سطح مستوٍ بخلاف ذلك
 (مما يوفر تجربة بصرية ولمسية محسّنة ) ، فإن النقش الرقمي يحاكي هذا التأثير 
فقط من خلال معالجة السطوع والتباين في المناطق الرئيسية حول موضوع الصورة.  
يمكن استخدام مرشح صور النقش لإضافة عمق سريع إلى أي صورة. تؤدي واجهة برمجة 
تطبيقات مرشح النقش أدناه عملية نقش رقمي قابلة للتخصيص ، تتطلب معلومات طلب الإدخال التالية:

- نصف القطر: نصف قطر البكسل لعملية النقش (القيم الأكبر ستنتج تأثيرًا أكبر)
- سيجما: تباين عملية النقش (القيم الأعلى تنتج تباينًا أعلى)
- ملف الصورة: مسار الملف لموضوع العملية (يدعم التنسيقات الشائعة مثل PNG و JPG).







3* تتالي API

نظرًا لوجود كاميرات الهواتف الذكية عالية الجودة في كل مكان ، فمن السهل اعتبار
انتشار الصور الملونة عالية الدقة أمرًا مفروغًا منه. تعود تفاصيل الألوان التي اعتدنا
 على رؤيتها في الصور اليومية إلى التطورات في تخزين وحدات البكسل عالي الجودة.
 الاختلافات الطفيفة في درجات الأحمر والأزرق والأخضر والعناصر الأخرى في
 طيف الألوان يتم حسابها في الغالب في مصفوفة واسعة من إحداثيات البكسل. بالمقارنة ، 
خلال حقبة ماضية من المطابع المادية ، كان تنوع الألوان المستخدمة لتشكيل صورة أقل تنوعًا ، 
وتهدف مرشحات التتابع الرقمي إلى محاكاة تأثير المدرسة القديمة. يقوم بذلك عن طريق
 تقليل حجم الألوان الفريدة في صورة ما ، مما يؤدي إلى تضييق نطاق مميز من القيم
 السداسية إلى مجموعة أكثر تجانساً. التأثير الجمالي لا لبس فيه ،

تتطلب واجهة برمجة تطبيقات التخصيص الواردة أدناه من المستخدم تقديم معلومات الطلب التالية:

- المستويات: عدد الألوان الفريدة التي يجب الاحتفاظ بها في الصورة الناتجة
- ملف الصورة: ملف الصورة المراد إجراء العملية عليه (يدعم التنسيقات الشائعة مثل PNG و JPG)


مظاهرة "API "Demonstration


لتنظيم استدعاء API الخاص بك لأي من الخدمات الثلاث الموضحة أعلاه ، 
فإن خطوتك الأولى هي تثبيت Java SDK. للقيام بذلك مع Maven ،
 أولاً ، أضف مرجعًا إلى المستودع في pom.xml:

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>


ثم أضف واحدًا إلى التبعية في pom.xml:

<dependencies>
<dependency>
    <groupId>com.github.Cloudmersive</groupId>
    <artifactId>Cloudmersive.APIClient.Java</artifactId>
    <version>v4.25</version>
</dependency>
</dependencies>


بدلاً من ذلك ، للتثبيت باستخدام Gradle ، قم بإضافته إلى بنية الجذر الخاصة بك (في نهاية المستودعات):

allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}


ثم أضف التبعية في build.gradle:

dependencies {
        implementation 'com.github.Cloudmersive:Cloudmersive.APIClient.Java:v4.25'
}


لاستخدام واجهة برمجة تطبيقات مرشح Grayscale ، استخدم الكود التالي لهيكلة استدعاء API الخاص بك:


// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.FilterApi;

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");

FilterApi apiInstance = new FilterApi();
File imageFile = new File("/path/to/inputfile"); // File | Image file to perform the operation on.  Common file formats such as PNG, JPEG are supported.
try {
    byte[] result = apiInstance.filterBlackAndWhite(imageFile);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling FilterApi#filterBlackAndWhite");
    e.printStackTrace();
}


*****






لاستخدام واجهة برمجة تطبيقات مرشح النقش ، استخدم الكود أدناه بدلاً
 من ذلك (تذكر أن تقوم بتكوين نصف القطر الخاص بك وسيغما في المعلمات الخاصة بهما):


// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.FilterApi;

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");

FilterApi apiInstance = new FilterApi();
Integer radius = 56; // Integer | Radius in pixels of the emboss operation; a larger radius will produce a greater effect
Integer sigma = 56; // Integer | Sigma, or variance, of the emboss operation
File imageFile = new File("/path/to/inputfile"); // File | Image file to perform the operation on.  Common file formats such as PNG, JPEG are supported.
try {
    byte[] result = apiInstance.filterEmboss(radius, sigma, imageFile);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling FilterApi#filterEmboss");
    e.printStackTrace();
}


أخيرًا ، لاستخدام واجهة برمجة تطبيقات Posterization Filter ، استخدم
 الكود أدناه (تذكر تحديد مستوى التتابع الخاص بك بعدد صحيح كما هو موضح سابقًا):


// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.FilterApi;

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");

FilterApi apiInstance = new FilterApi();
Integer levels = 56; // Integer | Number of unique colors to retain in the output image
File imageFile = new File("/path/to/inputfile"); // File | Image file to perform the operation on.  Common file formats such as PNG, JPEG are supported.
try {
    byte[] result = apiInstance.filterPosterize(levels, imageFile);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling FilterApi#filterPosterize");
    e.printStackTrace();
}


عند استخدام واجهات برمجة تطبيقات Embossment and Posterization ،
 أوصي بتجربة قيم نصف قطر وسيغما ومستويات مختلفة للعثور على التوازن الصحيح. 


جدول المحتويات