دوّر الصورة إلى اتجاهها الصحيح
تدوير الصورة يعني تغيير اتجاهها بدرجات ثابتة: ربع دورة (90 أو 270 درجة) أو نصف دورة (180 درجة). النتيجة صورة بنفس المحتوى، لكن في الاتجاه الصحيح المطلوب تمامًا، جاهزة للاستخدام أو الطباعة أو الأرشفة فورًا.
هذه المهمة غير متاحة حاليًا، لذا لا يمكن شراؤها. ولا يتم تحصيل أي رسوم مقابلها.
اطّلع على الـAPIتدوير سريع بدرجات ثابتة
كثير من الصور تصل مقلوبة تمامًا بسبب طريقة التقاطها بالهاتف — رأسًا على عقب أو على جانبها. تدوير بدرجات ثابتة 90 أو 180 أو 270 يصحح هذا الخطأ بسرعة، وهي الحالة الأكثر شيوعًا لصور ممسوحة ضوئيًا وُضعت في الماسح بالاتجاه الخطأ، أو صور هاتف حُفظت دون معلومات الاتجاه الصحيحة أصلًا داخل الملف نفسه، فتظهر مقلوبة عند فتحها على جهاز آخر.
لماذا تظهر الصورة مقلوبة أحيانًا
كثير من كاميرات الهاتف لا تدوّر وحدات الصورة فعليًا عند إمساك الجهاز بالعرض، بل تكتب في بيانات EXIF علامة اتجاه تقول «اعرضها مدارة» وتترك البرنامج يقرأها ويدير الصورة عند العرض. هذا يعمل جيدًا في البرامج التي تحترم EXIF، ويفشل في كثير من أنظمة المعالجة القديمة ومولّدات المصغّرات التي تتجاهلها، فتظهر الصورة على جانبها. تثبيت الدوران في وحدات الصورة نفسها يحل المشكلة نهائيًا فتظهر صحيحة في كل مكان.
ما الذي يتغير بعد التدوير
عند التدوير بمقدار 90 أو 270 درجة يتبادل العرض والارتفاع موضعيهما، أما التدوير بمقدار 180 درجة فيبقي الأبعاد كما هي. جميعها زوايا قائمة تعيد ترتيب وحدات الصورة فقط دون إعادة حساب أو ترك فراغات في الزوايا، فيبقى المحتوى الأصلي كما هو تمامًا بلا أي أثر إضافي على الملف.
الجودة لا تتأثر بالتدوير
التدوير بدرجات ثابتة عملية هندسية بحتة لا تضغط الملف ولا تفقده تفاصيل: وحدات الصورة تُعاد ترتيبها فقط، فتبقى الجودة كما هي بعد التدوير سواء كان ربع دورة أو نصف دورة. لا إعادة تشكيل للبكسل ولا ضغط إضافي مطبَّق على الملف، والتغيير الوحيد الملحوظ هو تبادل العرض والارتفاع في ربع الدورة.
حالات الاستخدام
تصحيح صورة مستند ممسوح ضوئيًا بالخطأ
يمسح محمد الحربي عقدًا ضوئيًا فيخرج مقلوبًا على جانبه بسبب وضعه الخطأ في الماسح. يدوّره 90 درجة فيعود إلى اتجاهه الصحيح القابل للقراءة والأرشفة.
تصحيح صورة منتج ملتقطة بالعرض
التقطت مؤسسة النخيل للمقاولات صورة معدة بالعرض بدل الطول. تدوّرها 90 درجة فتظهر مستقيمة في كتالوج المنتجات دون تعديل يدوي.
صورة هاتف محفوظة باتجاه خطأ
تكتشف سارة النعيمي أن صورة التقطتها بهاتفها تظهر مقلوبة رأسًا على عقب عند فتحها على حاسوب مختلف. تدويرها 180 درجة يصححها فورًا قبل إرسالها لعميل.
الأسئلة الشائعة
هل يمكن تدوير الصورة بزاوية غير الدرجات الثابتة؟
لا، التدوير بالزوايا القائمة فقط: 0 أو 90 أو 180 أو 270 درجة. هذا يغطي الصور والمستندات المقلوبة أو على جانبها؛ أما تصحيح ميل بسيط بضع درجات فغير مدعوم هنا.
هل تتغير أبعاد الصورة بعد ربع دورة؟
نعم، عند التدوير 90 أو 270 درجة يتبادل العرض والارتفاع موضعيهما. أما التدوير 180 درجة فيبقي الأبعاد كما هي.
هل يقل وضوح الصورة بعد التدوير؟
لا، التدوير بدرجات ثابتة يعيد ترتيب وحدات الصورة فقط دون إعادة حساب، فتبقى الجودة كما هي تمامًا.
كم تكلفة تدوير صورة واحدة؟
السعر $0.002 للطلب الواحد إضافة إلى $0.005 للصورة، بغض النظر عن درجة التدوير المطلوبة.
هل تحتفظون بصورتي بعد تدويرها؟
لا. تُستخدم الصورة أثناء المعالجة فقط عبر اتصال مشفّر، ولا تبقى محفوظة على خوادمنا بعد تسليم النتيجة.
هل يعمل التدوير على صور ممسوحة ضوئيًا كبيرة الحجم؟
نعم، طالما التزم الملف بحد 15 ميغابايت و12 ميغابكسل، وهو ما يغطي عمليًا صورًا ممسوحة ضوئيًا بدقة عالية جدًا.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
One authenticated POST creates the task; the result comes back by webhook or a signed link. This capability is currently available through the API, not as an interactive Web tool.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/image/rotate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/image/rotate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/rotate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/rotate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/rotate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"image": "https://ejemplo.com/imagen.jpg"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.rotate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_mb | 15 |
max_megapixels | 12 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |