Repository: JoshuaKGoldberg/create-typescript-app (ts)

Issue:
🐛 Bug: Transition mode is moving an existing All Contributors badge outside of badges
### Bug Report Checklist

- [x] I have tried restarting my IDE and the issue persists.
- [x] I have pulled the latest `main` branch of the repository.
- [x] I have [searched for related issues](https://github.com/JoshuaKGoldberg/create-typescript-app/issues?q=is%3Aissue) and found none that matched my issue.

### Expected

Running `npx create-typescript-app` in a repository templated from an older version of the tooling should migrate all README.md badges over to the new template.

### Actual

https://github.com/JoshuaKGoldberg/cached-factory/pull/21 -> https://github.com/JoshuaKGoldberg/cached-factory/blob/71fac31de038ab6208f779afe5abe7bc34518f69/README.md?plain=1#L21 shows:

```md
</p>

<img align="right" alt="All Contributors: 1" src="<https://img.shields.io/badge/all_contributors-1-21bb42.svg>" ">

## Usage
```

That's an odd image and definitely a bug.

### Additional Info

The image on `main` is: https://github.com/JoshuaKGoldberg/cached-factory/blob/30ce74b3761cd0f9f5c7612b5a9ef9aaaf26e687/README.md?plain=1#L9C1-L9C99

```md
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
<img alt="All Contributors: 1" src="https://img.shields.io/badge/all_contributors-1-21bb42.svg" />
<!-- ALL-CONTRIBUTORS-BADGE:END -->
```

🎁 

Pull request description:
fix: ignore known badges when reading logo
## PR Checklist

- [x] Addresses an existing open issue: fixes #2022
- [x] That issue was marked as [`status: accepting prs`](https://github.com/JoshuaKGoldberg/create-typescript-app/issues?q=is%3Aopen+is%3Aissue+label%3A%22status%3A+accepting+prs%22)
- [x] Steps in [CONTRIBUTING.md](https://github.com/JoshuaKGoldberg/create-typescript-app/blob/main/.github/CONTRIBUTING.md) were taken

## Overview

Ignores:

* Alt text of `All Contributors: \d+`
* Source images from `img.shields.io`

🎁 

Patch:
diff --git a/src/options/readLogo.ts b/src/options/readLogo.ts
index 750ee91..3abdbf1 100644
--- a/src/options/readLogo.ts
+++ b/src/options/readLogo.ts
@@ -7,19 +7,25 @@ export async function readLogo(getReadme: () => Promise<string>) {
 		return undefined;
 	}
 
+	const alt =
+		/alt=['"](.+)['"]\s*src=/.exec(tag)?.[1].split(/['"]?\s*\w+=/)[0] ??
+		"Project logo";
+
+	if (/All Contributors: \d+/.test(alt)) {
+		return undefined;
+	}
+
 	const src = /src\s*=(.+)['"/]>/
 		.exec(tag)?.[1]
 		?.split(/\s*\w+=/)[0]
 		.replaceAll(/^['"]|['"]$/g, "");
 
-	if (!src) {
+	if (!src || src.includes("//img.shields.io")) {
 		return undefined;
 	}
 
 	return {
-		alt:
-			/alt=['"](.+)['"]\s*src=/.exec(tag)?.[1].split(/['"]?\s*\w+=/)[0] ??
-			"Project logo",
+		alt,
 		src,
 		...readLogoSizing(src),
 	};


Test patch:
diff --git a/src/options/readLogo.test.ts b/src/options/readLogo.test.ts
index 07a70e8..e1bf702 100644
--- a/src/options/readLogo.test.ts
+++ b/src/options/readLogo.test.ts
@@ -24,6 +24,26 @@ describe(readLogo, () => {
 			expect(logo).toBeUndefined();
 		});
 
+		it("resolves undefined when the found image is an All Contributors badge", async () => {
+			const logo = await readLogo(() =>
+				Promise.resolve(
+					`\n<img alt="All Contributors: 1" src="https://img.shields.io/badge/all_contributors-1-21bb42.svg" />`,
+				),
+			);
+
+			expect(logo).toBeUndefined();
+		});
+
+		it("resolves undefined when the found image is a shields.io badge", async () => {
+			const logo = await readLogo(() =>
+				Promise.resolve(
+					`\n<img alt="TypeScript: Strict" src="https://img.shields.io/badge/typescript-strict-21bb42.svg" />`,
+				),
+			);
+
+			expect(logo).toBeUndefined();
+		});
+
 		it("parses when found in an unquoted string", async () => {
 			const logo = await readLogo(() =>
 				Promise.resolve(`