4.5. Quay ngược lệnh

Hầu như tất cả mọi thứ bạn thực hiện trên một ảnh trong GIMP đều có thể đảo ngược lại được. Bạn có thể quay ngược lại hành động vừa mới làm bằng cách chọn Edit->Undo từ menu ảnh, tuy nhiên lệnh này được sử dụng thường xuyên đến mức bạn nên nhớ tổ hợp phím tắt Ctrl-Z.

Bản thân quay ngược lệnh cũng có thể được "quay ngược lại". Sau khi quay ngược lại một lệnh, và có thể thực hiện lại (redo) nó bằng cách chọn Edit->Redo từ menu ảnh, hoặc sử dụng tổ hợp phím tắt, Ctrl-Y. Một điều khá hữu ích để kiểm tra tác động của một lệnh là quay ngược và lặp lại lệnh đó nhiều lần. Điều thường được thực hiện rất nhanh và không đòi hỏi nhiều tài nguyên hệ thống cũng như không thay đổi "lịch sử" quay ngược lệnh (undo history). Do vậy nó không có tác hại gì.

[Caution] Lưu ý

Nếu bạn thực hiện quay ngược lại một hay nhiều lệnh tác động lên ảnh và sau đó tác động lên ảnh theo bất kỳ một cách nào khác ngoại trừ lệnh quay ngược và lặp lại, thì bạn không thể thực hiện lại lệnh đó được nữa: chúng sẽ "ra đi" mãi mãi. Nếu nó gây khó khăn cho bạn, thì giải pháp cho vấn đề này là tạo bản sao của ảnh và thực hiện trên bản sao đó. (Không phải là ảnh gốc, bởi vì "lịch sử" quay ngược/lặp lại lệnh không được lưu khi bạn tạo bản sao của một ảnh.)

Nếu bạn thấy rằng mình thường xuyên quay ngược và lặp lại lệnh nhiều lần một lúc, sẽ tiện lợi hơn cho bạn nếu sử dụng Hộp thoại Undo History, một hộp thoại gắn được cho bạn biết vắn tắt (small sketch) mỗi thời điểm của "lịch sử" đảo ngược lệnh, cho phép bạn tới, lui thời điểm đó bằng cách nhắp chuột.

Quay ngược lệnh được thực hiện dựa trên cơ sở đặc trưng của ảnh (image-specific basis): "Lịch sử đảo ngược lệnh" là một trong các thành phần của ảnh. GIMP dành một lượng bộ nhớ nhất định phục vụ cho mục đích này trên mỗi ảnh. Bạn có thể tuỳ biến "sở thích" của mình để tăng hay giảm lượng bộ nhớ này, bằng cách dùng trang Environment của hộp thoại Preferences. Có hai biến số quan trọng: số lần tối thiểu các mức độ quay ngược lệnh (minimal number of undo levels), là yếu tố GIMP sẽ lưu giữ lại bất kể chúng tiêu hao bộ nhớ đến mức nào, và bộ nhớ quay ngược lệnh tối đa (maximum undo memory), vượt quá giá trị này GIMP bắt đầu xoá đi các mục cũ nhất khỏi Lịch sử quay ngược lệnh.

[Note] Ghi chú

Mặc dù lịch sử quay ngược lệnh là một thành phần của một ảnh, nó không được lưu lại khi bạn lưu ảnh bằng định dạng nguyên thủy XCF của GIMP, là định dạng lưu giữ tất cả các thuộc tính khác của ảnh. Khi ảnh được mở lại, nó sẽ có một lịch sử quay ngược lệnh trống.

Việc GIMP thực thi tác vụ quay ngược lệnh khá phức tạp. Nhiều tác vụ đòi hỏi rất ít bộ nhớ (ví dụ như thay đổi mức độ nhìn thấy của một lớp), vì thế bạn có thể thực hiện rất nhiều trước chúng bắt đầu bị loại bỏ khỏi lịch sử quay ngược lệnh. Một số tác vụ (lại lấy mức độ nhìn thấy của một lớp làm ví dụ) được nén lại (compressed), vì thế thực hiện chúng vài lần liên tục chỉ tạo ra một điểm duy nhất trong lịch sử quay ngược lệnh. Tuy nhiên, có những tác vụ khác đòi hỏi lượng bộ nhớ quay ngược lệnh rất lớn. Hầu hết các bộ lọc và ví dụ của trường hợp này: bởi vì chúng được thực thi bởi các plug-in, nhân chương trình GIMP thực ra không có một cách hiệu quả nào để biết được các plug-in đó đã thay đổi những gì, vì thế không có cách nào thực hiện được việc quay ngược lệnh nếu không ghi nhớ toàn bộ nội dung của lớp bị xử lý trước và sau lệnh đó. Bạn có thể chỉ thực hiện được vài lệnh như vậy trước khi chúng bị loại bỏ khỏi lịch sử đảo ngược lệnh.

Những thứ không thể quay ngược lại

Hầu hết các lệnh thay đổi một ảnh đều có thể đảo ngược lại. Những lệnh không làm thay đổi ảnh thì thông thường không thể đảo ngược được. Điều này bao gồm cả các lệnh lưu ảnh vào một tập tin, tạo bản sao (duplicating) của ảnh, sao chép một phần của ảnh vào bộ nhớ clipboard, v.v. Nó cũng bao gồm hầu hết các tác vụ ảnh hưởng đến sự hiển thị của ảnh mà không làm thay đổi các dữ liệu ảnh ở phía dưới. Ví dụ quan trọng nhất của trường hợp này là phóng to/thu nhỏ ảnh. Tuy nhiên có một vài ngoại lệ: bật/tắt QuickMask có thể đảo ngược lại, thậm chí mặc dù nó không làm thay đổi dữ liệu ảnh.

Có một vài tác vụ quan trọng làm thay đổi dữ liệu ảnh nhưng không thể quay ngược lại được:

Đóng ảnh

Lịch sử quay ngược lệnh là một thành phần của ảnh, vì thế khi đóng ảnh lại và tất cả tài nguyên hệ thống được giải phóng, lịch sử quay ngược lệnh cũng "biến" theo. Vì lý do này, trừ khi ảnh không bị thay đổi kể từ lần cuối cùng nó đượclưu, GIMP luôn hỏi bạn khẳng định rằng bạn có thực sự muốn đóng ảnh hay không. (Bạn có thể bất hoạt điều này bằng trang Environment của hộp thoại Preferences; nếu bạn làm như vậy, coi như bạn tự chịu trách nhiệm cho hành vi của bạn đấy nhé).

Trả lại ảnh về lúc đầu

"Trả lại về tình trạng ban đầu" (Reverting) một ảnh có nghĩa là nạp lại ảnh từ tập tin. Thực ra GIMP chạy  lệnh này bằng cách đóng ảnh đó và tạo ra một ảnh mới, vì thế hệ quả là lịch sử quay ngược lệnh bị mất. Vì lý do này, nếu ảnh chưa được "sạch", GIMP sẽ luôn hỏi bạn để khẳng định rằng bạn có muốn đảo ngược ảnh hay không.

"Các mảnh" lệnh

Một số công cụ đòi hỏi bạn thực hiện một chuỗi các thao tác phức tạp trước khi chúng có tác dụng, nhưng chỉ cho phép bạn quay ngược lại cả một lệnh lớn chứ không phải từng thành phần riêng lẻ. Ví dụ, công cụ Intelligent Scissors (kéo cắt thông minh) đòi hỏi bạn phải tạo ra một đường dẫn khép kín bằng cách nhắp chuột qua nhiều điểm trong ảnh, và sau đó nhắp chuột vào trong đường dẫn để tạo ra một phép chọn. Bạn không thể quay ngược lại từng lần nhắp chuột riêng lẻ: quay ngược lệnh sau khi bạn kết thúc phép chọn sẽ trả bạn ngược trở lại điểm bắt đầu. Một ví dụ khác, khi bạn làm việc với công cụ Text (gõ văn bản), bạn không thể quay ngược lại từng ký tự riêng lẻ, các lần thay đổi kiểu chữ, v.v.: quay ngược lại sau khi bạn kết thúc lệnh sẽ loại bỏ lớp văn bản vừa mới được tạo ra.

Các bộ lọc, và các tác vụ khác được thực thi bởi các plug-in hoặc các tập lệnh, có thể quay ngược lại giống như các lệnh được thực thi bởi nhân chương trình GIMP, nhưng điều này đòi hỏi chúng phải sử dụng đúng đắn các chức năng quay ngược lệnh của GIMP. Nếu mã chương trình viết không đúng, một plug-in có thể làm hỏng lịch sử quay ngược lệnh, vì thế không chỉ plug-in đó mà cả các tác vụ trước cũng không còn có thể quay ngược lại được nữa. Các plug-in và các tập lệnh được phân phối cùng với GIMP đều được kiểm tra làm việc tốt, nhưng rõ ràng là không có gì đảm bảo khi bạn sử dụng các plug-in từ những nguồn khác. Hơn nữa, thậm chí nếu mã chương trình được viết đúng, hủy một plug-in khi nó đang chạy đôi khi có thể khiến cho lịch sử đảo ngược lệnh bị hỏng, vì thế tốt nhất là nên tránh điều này trừ khi bạn sơ ý  làm một điều gì đó mà hậu quả có thể rất tai hại.