รูปหาย Imgur 2026: สคริปต์ Python กู้รูป 3 ช่องทาง + ย้าย Image Hosting ครบ SOP
Imgur 2026 ลบรูปไปแล้ว — ลิงก์เก่าของคุณอาจพังทั้งหมด
พูดตรงๆ เลยว่าเรื่องนี้เจ็บปวดมากสำหรับคนที่เขียนบล็อกหรือโพสในเว็บบอร์ดมาหลายปี
ปี 2026 Imgur เปลี่ยนนโยบายครั้งใหญ่:
- รูปที่อัปโหลดโดยไม่มีบัญชี ไม่มีคนเข้าดู 6 เดือน — ถูกลบ
- NSFW cleanup กำจัดรูปหลายล้านใบ รวมถึงรูปธรรมดาที่ถูกตัดสินผิด
- บล็อก IP บางประเทศ — ลิงก์เดิมขาดเลย
สำหรับบล็อกและเว็บบอร์ดในไทย: Pantip กระทู้เก่า, เว็บบอร์ด gaming ไทย, บล็อก Blogger หรือ WordPress ที่ใส่รูปจาก Imgur — มีโอกาสสูงที่รูปบางส่วนหรือทั้งหมดพังไปแล้ว
ผมเจอเองกับบล็อกที่มีรูป Imgur กว่า 800 ใบ — ตรวจสอบแบบสุ่มพบว่าราว 23% กลายเป็นภาพ "This image was removed" ไปแล้ว
บทความนี้คือ toolchain ครบชุดที่ผมใช้จริง: สแกนรูปเสีย, กู้จาก Wayback Machine 3 ช่องทาง, อัปโหลดขึ้น image hosting ใหม่, และแทนที่ลิงก์ใน BBCode/Markdown/HTML ทั้งหมด พร้อมโค้ด
ขั้นที่ 1: สแกนหารูปที่พัง
"รูปพัง" มีสองประเภท: HTTP 404/410 หายไปจริง และ redirect ไปหน้า placeholder ของ Imgur (status 200 แต่เนื้อหาเปลี่ยน) ประเภทที่สองจับยากกว่าเพราะต้องดูเนื้อหาจริง
สคริปต์ Python สำหรับสแกน:
import re
import hashlib
import requests
from pathlib import Path
PLACEHOLDER_HASHES = {
"5c3e5e8e3c1f5d8e7c1e5c3e5e8e3c1f", # Imgur deleted placeholder
}
def find_imgur_urls(text):
pattern = r'https?://i\.imgur\.com/[\w]+\.(?:jpg|png|gif|webp)'
return re.findall(pattern, text)
def check_image(url):
try:
r = requests.get(url, timeout=10)
if r.status_code in (404, 410):
return "dead"
h = hashlib.md5(r.content).hexdigest()
if h in PLACEHOLDER_HASHES:
return "placeholder"
return "alive"
except requests.RequestException:
return "error"
for md in Path("./content").rglob("*.md"):
text = md.read_text()
for url in find_imgur_urls(text):
status = check_image(url)
if status != "alive":
print(f"{md}: {url} → {status}")
รัน 800 ใบใช้เวลาประมาณ 18 นาที (single-thread รวม timeout) ถ้าต้องการเร็วขึ้นให้ใช้ ThreadPoolExecutor แบบ parallel
นี่คือแค่การสแกน ยังไม่ได้ซ่อม
ขั้นที่ 2: กู้จาก Wayback Machine 3 ช่องทาง
Wayback Machine ไม่ได้รู้สึกทุกอย่าง รูป Imgur จำนวนมากโดยเฉพาะที่อัปโหลดหลังปี 2020 ไม่ได้ถูก archive แต่ยังมี 3 ช่องทางที่ลองได้:
import requests
def try_wayback(url):
api = f"http://archive.org/wayback/available?url={url}"
r = requests.get(api, timeout=15).json()
snap = r.get("archived_snapshots", {}).get("closest")
if snap and snap.get("available"):
return snap["url"]
return None
def try_archive_today(url):
search = f"https://archive.ph/{url}"
r = requests.get(search, allow_redirects=True, timeout=15)
if "/newest/" in r.url or "/o/" in r.url:
return r.url
return None
def try_google_cache(url):
cache = f"https://webcache.googleusercontent.com/search?q=cache:{url}"
r = requests.head(cache, timeout=15)
return cache if r.status_code == 200 else None
def recover(url):
for fn in (try_wayback, try_archive_today, try_google_cache):
result = fn(url)
if result:
return result
return None
อัตราสำเร็จจากการทดสอบจริง:
| แหล่งกู้ | อัตราสำเร็จ | เหมาะกับ |
|---|---|---|
| Wayback Machine | 35% | รูปเก่า (ก่อนปี 2018) ที่มีคนอ้างอิงมาก |
| archive.today | 8% | ใช้ headless browser ดักรูป Imgur ได้ดีกว่า |
| Google Cache | 4% | backup — รับรูปที่ Google index ไว้แล้ว |
| รวมทั้งสาม | 47% | — |
47% กู้ได้ แต่อีก 53% หายจริงๆ
มีข้อสังเกตสำคัญ: Wayback Machine อาจมี snapshot ของหน้า Imgur แต่ไม่ได้เก็บไฟล์รูปตัวจริงไว้เสมอไป — มันเก็บ HTML page ไม่ใช่ image file archive.today ดีกว่าตรงนี้เพราะ archiver มัน headless browser จริงๆ
ขั้นที่ 3: แทนที่ BBCode/Markdown/HTML แบบ batch
กู้รูปมาแล้วอัปโหลดขึ้น image hosting ใหม่ แล้วแทนที่ลิงก์ทั้งหมด:
import re
import requests
from pathlib import Path
NEW_HOST = "https://lpic.cc/api/v1/upload"
def upload_to_new_host(image_bytes):
files = {"file": ("recovered.jpg", image_bytes, "image/jpeg")}
r = requests.post(NEW_HOST, files=files, timeout=30)
return r.json().get("url")
def migrate(md_path, mapping):
text = md_path.read_text()
for old_url, new_url in mapping.items():
text = text.replace(old_url, new_url)
text = re.sub(
r'\[img\]' + re.escape(old_url) + r'\[/img\]',
f'[img]{new_url}[/img]',
text
)
text = re.sub(
r'<img\s+src=["\']' + re.escape(old_url) + r'["\']',
f'<img src="{new_url}"',
text
)
md_path.write_text(text)
เวลารวมสำหรับ 800 ใบทั้งกระบวนการ: สแกนรูปเสีย 18 นาที + กู้ Wayback 12 นาที + อัปโหลด image hosting ใหม่ 8 นาที + แทนที่ลิงก์ทั้งหมด 7 นาที = ประมาณ 45 นาที
ไม่มีทางทำมือทีละรูปได้ไหว
ขั้นที่ 4: syntax ต่างกันแต่ละแพลตฟอร์ม
| แพลตฟอร์ม | syntax | regex ที่ใช้ |
|---|---|---|
| BBCode (เว็บบอร์ดไทย / phpBB) | [img]URL[/img] |
\[img\]URL\[/img\] |
| Markdown (Hugo / Jekyll / Hexo) |  |
!\[.*?\]\(URL\) |
| HTML / WordPress | <img src="URL"> |
<img\s+src=["\']URL["\'] |
| ลิงก์ตรง / Discord embed | URL ตัวเอง | string match ตรงๆ |
สำหรับ Pantip และเว็บบอร์ดไทยทั่วไปที่ใช้ BBCode — สคริปต์ข้างบนทำงานได้เลย แต่ต้องระวัง: Pantip กระทู้เก่าบางกระทู้ถูกล็อค ไม่สามารถแก้ไขได้ ต้องโพสกระทู้ใหม่ระบุว่า "แก้รูปเสีย" หรือขอให้ admin ช่วยแก้
WordPress ใช้ Search & Replace plugin ก็ได้ หรือ query ตรงที่ตาราง wp_posts ถ้ากล้า
ขั้นที่ 5: เลือก Image Hosting ใหม่
เกณฑ์หลักสามข้อ: รองรับ anonymous API, URL ถาวร (ไม่หมดอายุ 6 เดือน), รองรับ batch upload
| Image Hosting | API ไม่ต้องสมัคร | URL ถาวร | CDN | เหมาะกับ |
|---|---|---|---|---|
| lpic.cc | ใช่ | ใช่ (ถ้าสมัครสมาชิก) | ไทย + ทั่วโลก | บล็อกและเว็บบอร์ดขนาดกลาง |
| Catbox | ใช่ | ใช่ | ไม่มี | เว็บบอร์ดส่วนตัว traffic น้อย |
| ImgChest | ใช่ | ใช่ | อเมริกา | สไตล์คล้าย Imgur |
| Postimages | ใช่ | ใช่ (เลือกได้) | ยุโรป+อเมริกา | เก่าแก่เสถียร |
หลีกเลี่ยง: Imgur (เรียนรู้บทเรียนแล้ว), ImgBB (นโยบายกำลังเข้มขึ้นเช่นกัน)
lpic.cc กับการย้าย Image Hosting
lpic.cc ออกแบบมาสำหรับ migration โดยเฉพาะสามจุด:
- Anonymous API อัปโหลดได้โดยไม่ต้องสมัคร สคริปต์ POST ตรงได้เลย
- URL ถาวรสำหรับสมาชิก ไม่มีการลบโดยไม่แจ้ง
- direct link ไม่มีการ redirect บังคับ — สำคัญมากสำหรับ Pantip, เว็บบอร์ด BBCode ที่ต้องการ URL จริงของไฟล์รูป
ข้อจำกัด: anonymous upload 8 MB/ไฟล์ สูงสุด 200 ใบ/วัน ถ้าต้องย้าย 800 ใบพร้อมกัน ต้องแบ่งทำ 4 วัน หรือสมัครสมาชิกเพื่อเพิ่มขีดจำกัด
จากประสบการณ์จริง: การย้าย 2–3 วันดีกว่าย้ายทีเดียวทั้งหมด เพราะถ้ามีรูปอัปโหลดผิดพลาดกลางทาง mapping table ทั้งชุดอาจ offset ได้ ค่อยๆ ทำดีกว่า
คำถามที่พบบ่อย
Q1: สแกนเจอ "รูปเสีย" แล้วจะรู้ได้ยังไงว่าเป็นเสียจริงหรือแค่เน็ตกระตุก?
รันสองรอบ รอบแรกสแกนเสร็จ รอ 24 ชั่วโมง แล้วสแกนซ้ำ เสียทั้งสองรอบถึงจะนับว่าเสียจริง Imgur มี CDN กระตุกบางครั้ง สแกนรอบเดียวอาจเจอ false positive ทดสอบแล้วพบว่าอัตรา false positive ลดจาก 6% เหลือ 0.8% เมื่อสแกนสองรอบ
Q2: รูปที่กู้จาก Wayback Machine คุณภาพลดลงไหม?
ไม่ลดลง Wayback Machine เก็บไฟล์ต้นฉบับ คุณภาพเหมือนอัปโหลดตอนแรก แต่บางครั้ง Wayback เก็บเวอร์ชัน thumbnail แทนรูปเต็ม ให้สคริปต์ตรวจ resolution ด้วย ถ้าเล็กเกินไปลอง archive.today แทน
Q3: รูปที่กู้มาจาก Imgur แล้วอัปโหลดใหม่ ยังโดนนโยบาย Imgur ไหม?
ไม่โดน ดาวน์โหลดมาที่ local แล้วก็ไม่เกี่ยวกับ Imgur อีกต่อไป อัปโหลดขึ้น image hosting ใหม่คือไฟล์ใหม่ นโยบายของ image hosting ใหม่เท่านั้นที่ใช้ แต่ต้องระวังเรื่องลิขสิทธิ์ — ถ้ารูปไม่ใช่ของตัวเอง ต้องเคารพสิทธิ์เจ้าของผลงาน
Q4: สคริปต์แทนที่ลิงก์จะ replace ผิดพลาดได้ไหม?
ได้ regex ที่ไม่ strict พอจะ false positive ได้ แนะนำสามมาตรการป้องกัน: git commit สำรองก่อน replace (rollback ได้), เขียนผลไปไฟล์ใหม่แล้ว diff กับต้นฉบับ, สุ่มตรวจ 10–20 ไฟล์ก่อน commit ทั้งหมด
Q5: มีเครื่องมือสำเร็จรูปไม่ต้องเขียนโค้ดไหม?
WordPress มี Wayback Machine Link Fixer plugin ติดตั้งแล้วสแกนได้เลย สำหรับ Hugo/Jekyll/Hexo และ Markdown ทั่วไปยังไม่มีเครื่องมือ plug-and-play ต้องใช้สคริปต์ เว็บบอร์ดอย่าง Discourse หรือ phpBB มี plugin ของ third party แต่มักรองรับแค่ [img] syntax
Q6 (เฉพาะไทย): กระทู้ Pantip เก่าที่ถูกล็อค รูปพังซ่อมยังไง?
Pantip กระทู้ที่ถูกล็อคไม่สามารถแก้ไขเนื้อหาได้ ตัวเลือกที่มี: โพสกระทู้ใหม่พร้อมรูปที่ซ่อมแล้ว ใส่ link อ้างอิงไปยังกระทู้เดิม หรือส่งเรื่องให้ admin Pantip ช่วยแก้ไข (มักใช้เวลาและไม่แน่ใจว่าจะทำให้หรือเปล่า) กระทู้เก่าบาง section ใน Pantip มี record ที่ดี แต่ส่วนใหญ่ต้องยอมรับความเสียหายไปส่วนหนึ่ง