กลับสู่บล็อก
คู่มือเทคโนโลยี

รูปหาย Imgur 2026: สคริปต์ Python กู้รูป 3 ช่องทาง + ย้าย Image Hosting ครบ SOP

เผยแพร่เมื่อ5 min read
แชร์

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) ![alt](URL) !\[.*?\]\(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 โดยเฉพาะสามจุด:

  1. Anonymous API อัปโหลดได้โดยไม่ต้องสมัคร สคริปต์ POST ตรงได้เลย
  2. URL ถาวรสำหรับสมาชิก ไม่มีการลบโดยไม่แจ้ง
  3. 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 ที่ดี แต่ส่วนใหญ่ต้องยอมรับความเสียหายไปส่วนหนึ่ง

References

#ย้าย image hosting#Imgur#Wayback Machine#BBCode#Markdown#Python script#ซ่อมลิงก์รูป#Pantip
H

เขียนโดย

Harvey Zhang

ผู้ร่วมก่อตั้ง & CTO

วิศวกร Backend และสถาปนิกระบบ